User prompt
I want the menu to be designed in the style of Doraemon, and the buttons should appear as if they are coming out of Doraemon’s pocket. When we click on Doraemon’s pocket, the buttons should appear on top of a red ball, with the text displayed in the same style.
User prompt
The sound in the main menu should be different from the sound in the game.
Remix started
Copy Dragon Dash
/**** * Classes ****/ /**** * Character: Dokunulduğunda zıplar. ****/ var Character = Container.expand(function () { var self = Container.call(this); self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); self.zIndex = 4; self.velocityY = 0; self.gravity = 0.3; self.jumpStrength = -12.1; self.width = 350; self.height = 300; self.update = function () { if (gameStarted && !gameOver) { self.velocityY += self.gravity; self.y += self.velocityY; if (self.y > groundY - 100) { self.y = groundY - 100; self.velocityY = 0; if (!self.intersects(underscoreAsset) && !self.preventDeath) { gameOver = true; endGame(); } } var characterLeft = self.x - self.width / 2; var characterRight = self.x + self.width / 2; var characterTop = self.y - self.height / 2; var characterBottom = self.y + self.height / 2; if (characterLeft + self.width / 2 < 0 || characterRight - self.width / 2 > screenRight || characterTop + self.height / 2 < 0 || characterBottom - self.height / 2 > groundY) { gameOver = true; endGame(); } game.children.forEach(function (child) { if (child instanceof Tube) { var tubeLeft = child.x - child.bottomTube.width / 2; var tubeRight = child.x + child.bottomTube.width / 2; var safeGapLowerEdge = child.y - child.bottomTube.height; var safeGapUpperEdge = -gapOffset + child.topTube.height; if (self.x + self.width / 2 > tubeLeft && self.x - self.width / 2 < tubeRight) { if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) { if (!self.intersects(underscoreAsset) && !self.preventDeath) { gameOver = true; endGame(); } } } } else if (child instanceof Tree) { var treeLeft = child.x - child.bottomTree.width / 2; var treeRight = child.x + child.bottomTree.width / 2; var safeGapLowerEdge = child.y - child.bottomTree.height; var safeGapUpperEdge = -gapOffset + child.topTree.height; if (self.x + self.width / 2 > treeLeft && self.x - self.width / 2 < treeRight) { if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) { if (!self.intersects(underscoreAsset) && !self.preventTreeDeath) { gameOver = true; endGame(); } } } } }); } }; self.jump = function () { if (!gameOver && gameStarted) { self.velocityY = self.jumpStrength; LK.getSound('wingeffect').play(); // Karakter zıpladığında background ve bg2'ye de jump etkisi uyguluyoruz: background.velocityY = background.jumpStrength; bg2.velocityY = bg2.jumpStrength; background3DContainer.velocityY = background3DContainer.jumpStrength; bgEffect3DContainer.velocityY = bgEffect3DContainer.jumpStrength; } }; return self; }); /**** * GameOverText class ****/ var GameOverText = Container.expand(function () { var self = Container.call(this); self.text = new Text2("GAME OVER", { fontFamily: "Arial", fontSize: 2250, fill: 0xFF0000, align: "center", fontWeight: "bold" }); self.text.anchorX = 0.5; self.text.anchorY = 0.5; self.addChild(self.text); self.zIndex = 100; return self; }); /**** * Tree class: Üst ve alt ağaç oluşturma ****/ var Tree = Container.expand(function () { var self = Container.call(this); var bottomUnit = Math.floor(Math.random() * 8) + 1; var topUnit = 9 - bottomUnit; var unitSize = groundY / totalUnits; var bottomHeight = bottomUnit * unitSize; var topHeight = topUnit * unitSize; self.y = groundY; self.bottomTree = self.attachAsset('tree', { anchorX: 0.5, anchorY: 1, width: 300, height: bottomHeight, flipY: false }); self.topTree = self.attachAsset('tree', { anchorX: 0.5, anchorY: 0.5, width: 300, height: topHeight, flipY: false }); self.topTree.rotation = Math.PI; self.topTree.y = -groundY - gapOffset + topHeight / 2; self.zIndex = 1; self.x = 2048 + 800; self.velocityX = -3.6; self.spawned = false; self.prevX = self.x; self.update = function () { if (gameStarted && !gameOver) { self.x += self.velocityX; if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) { self.spawned = true; var newTube = new Tube(); newTube.x = 2048 + 640; game.addChild(newTube); lastSpawner = newTube; } self.prevX = self.x; if (!self.passed && character.x > self.x + self.bottomTree.width / 2) { self.passed = true; updateScore(); } } }; return self; }); /**** * Tube class: Üst ve alt boru oluşturma ****/ var Tube = Container.expand(function () { var self = Container.call(this); var bottomUnit = Math.floor(Math.random() * 8) + 1; var topUnit = 9 - bottomUnit; var unitSize = groundY / totalUnits; var bottomHeight = bottomUnit * unitSize; var topHeight = topUnit * unitSize; self.y = groundY; self.bottomTube = self.attachAsset('tube', { anchorX: 0.5, anchorY: 1, width: 285, //{1C} // 5% thinner height: bottomHeight, flipY: false }); self.topTube = self.attachAsset('tube', { anchorX: 0.5, anchorY: 0.5, width: 285, //{1I} // 5% thinner height: topHeight, flipY: false }); self.topTube.rotation = Math.PI; self.topTube.y = -groundY - gapOffset + topHeight / 2; self.zIndex = 1; self.x = 2048 + 800; self.velocityX = -3.6; self.spawned = false; self.prevX = self.x; self.update = function () { if (gameStarted && !gameOver) { self.x += self.velocityX; if (self.velocityX === 0) { background.velocityX = 0; bg2.velocityX = 0; } if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) { self.spawned = true; var newTree = new Tree(); newTree.x = 2048 + 640; game.addChild(newTree); lastSpawner = newTree; } self.prevX = self.x; if (!self.passed && character.x > self.x + self.bottomTube.width / 2) { self.passed = true; updateScore(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ /**** * Global Variables & Helper Functions ****/ var groundY = 2732; var menuOpen = true; var volumeOn = true; var records = []; var gapOffset = 400; var gameStarted = false; var gameOver = false; var gameWait = false; var screenRight = 2048; var totalUnits = 10; var tubeSpawnThreshold, treeSpawnThreshold; var lastSpawner = null; var gameOverText = null; var passCounter = 0; var lastScore = 0; var backgroundScrollSpeed = 7.2; var containerScrollSpeed = 5; // Tanımlandı var underscoreTouchCount = 0; var flipped = false; function centerX() { return 2048 / 2; } function centerY() { return groundY / 2; } var objectSpawnThreshold = centerX() + (screenRight - centerX()) / 2; // Örnek container oluşturuluyor var myContainer = new Container(); myContainer.x = centerX(); // Ekranın yatay ortasında myContainer.y = 1900; // Başlangıçta y = 2000 (örneğin en üst sınır) // Sabit yukarı doğru hareket hızı (update fonksiyonunda uygulanacak) var containerUpwardSpeed = -0.5; // Her tıklamada ek olarak uygulanacak aşağı doğru kayma miktarı var extraDownDelta = 50; // Container'ın update fonksiyonu: her frame sabit hızda aşağıya doğru hareket eder myContainer.update = function () { // Oyun başlamışsa yukarı doğru hareket et if (gameStarted) { this.y += containerUpwardSpeed; // Minimum y sınırını 100 olarak ayarlıyoruz if (this.y < 100) { this.y = 100; } } }; // Container'a tıklama (touch/down) olayı ekliyoruz myContainer.on('down', function () { // Tıklamada ekstra aşağı kayma ekliyoruz this.y += extraDownDelta; if (this.y > 2600) { this.y = 2600; } }); // Oluşturulan container'ı oyuna ekleyelim game.addChild(myContainer); var menuContainer = new Container(); menuContainer.zIndex = 200; // Doraemon body and pocket (use blue/white ellipse and a pocket shape) var doraemonBody = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 400, scaleX: 7.5, scaleY: 7.5, color: 0x2196f3 // Doraemon blue }); doraemonBody.zIndex = 1000; menuContainer.addChild(doraemonBody); // Doraemon's pocket (white ellipse) var pocket = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 700, scaleX: 2.2, scaleY: 1.1, color: 0xffffff }); pocket.zIndex = 1001; menuContainer.addChild(pocket); // Red ball (the "magic" ball above the pocket) var redBall = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 600, scaleX: 0.7, scaleY: 0.7, color: 0xff0000 }); redBall.zIndex = 1002; menuContainer.addChild(redBall); // Hide menu buttons initially var playButton = LK.getAsset('button_play', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 600 }); playButton.visible = false; menuContainer.addChild(playButton); var playLabel = new Text2("PLAY", { fontFamily: "Comic Sans MS", fontSize: 630.25 * 1.1 * 1.08 * 1.5, fill: 0x1565c0, // Doraemon blue fontWeight: "bold", stroke: "#fff", strokeThickness: 12 }); playLabel.anchorX = 0.5; playLabel.anchorY = 0.5; playLabel.x = playButton.x; playLabel.y = playButton.y; playLabel.visible = false; playLabel.zIndex = 1003; menuContainer.addChild(playLabel); var volumeButton = LK.getAsset('button_volume', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 700 }); volumeButton.visible = false; menuContainer.addChild(volumeButton); var volumeLabel = new Text2("VOLUME", { fontFamily: "Comic Sans MS", fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5, fill: 0x1565c0, fontWeight: "bold", stroke: "#fff", strokeThickness: 8 }); volumeLabel.anchorX = 0.5; volumeLabel.anchorY = 0.5; volumeLabel.x = volumeButton.x; volumeLabel.y = volumeButton.y; volumeLabel.visible = false; volumeLabel.zIndex = 1003; menuContainer.addChild(volumeLabel); var creditsButton = LK.getAsset('button_credits', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 800 }); creditsButton.visible = false; menuContainer.addChild(creditsButton); var creditsLabel = new Text2("CREDITS", { fontFamily: "Comic Sans MS", fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5, fill: 0x1565c0, fontWeight: "bold", stroke: "#fff", strokeThickness: 8 }); creditsLabel.anchorX = 0.5; creditsLabel.anchorY = 0.5; creditsLabel.x = creditsButton.x; creditsLabel.y = creditsButton.y; creditsLabel.visible = false; creditsLabel.zIndex = 1003; menuContainer.addChild(creditsLabel); var recordsButton = LK.getAsset('button_records', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 900 }); recordsButton.visible = false; menuContainer.addChild(recordsButton); var recordsLabel = new Text2("RECORDS", { fontFamily: "Comic Sans MS", fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5, fill: 0x1565c0, fontWeight: "bold", stroke: "#fff", strokeThickness: 8 }); recordsLabel.anchorX = 0.5; recordsLabel.anchorY = 0.5; recordsLabel.x = recordsButton.x; recordsLabel.y = recordsButton.y; recordsLabel.visible = false; recordsLabel.zIndex = 1003; menuContainer.addChild(recordsLabel); // Animate buttons out of pocket on pocket click function showPocketMenuButtons() { // Animate red ball up and fade out tween.to(redBall, { y: centerY() + 500, alpha: 0 }, 350).start(); // Animate buttons up and fade in playButton.visible = true; playLabel.visible = true; volumeButton.visible = true; volumeLabel.visible = true; creditsButton.visible = true; creditsLabel.visible = true; recordsButton.visible = true; recordsLabel.visible = true; // Animate each button and label tween.to(playButton, { y: centerY() + 500 }, 350).start(); tween.to(playLabel, { y: centerY() + 500, alpha: 1 }, 350).start(); tween.to(volumeButton, { y: centerY() + 600 }, 400).start(); tween.to(volumeLabel, { y: centerY() + 600, alpha: 1 }, 400).start(); tween.to(creditsButton, { y: centerY() + 700 }, 450).start(); tween.to(creditsLabel, { y: centerY() + 700, alpha: 1 }, 450).start(); tween.to(recordsButton, { y: centerY() + 800 }, 500).start(); tween.to(recordsLabel, { y: centerY() + 800, alpha: 1 }, 500).start(); // Remove pocket click after first use pocket.off('down', showPocketMenuButtons); } // Only show buttons after pocket is clicked playButton.visible = false; playLabel.visible = false; volumeButton.visible = false; volumeLabel.visible = false; creditsButton.visible = false; creditsLabel.visible = false; recordsButton.visible = false; recordsLabel.visible = false; // Doraemon pocket click triggers menu pocket.on('down', showPocketMenuButtons); var counterText = new Text2('0', { size: 124.2, fill: 0xFFFFFF }); counterText.anchor.set(0, 0); counterText.x = 1315; counterText.y = 15; LK.gui.topLeft.addChild(counterText); var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: groundY / 2 }); background.zIndex = 0; background.velocityY = 0; background.gravity = 0.033; // 0'a çok yakın bir değer background.jumpStrength = 0.66; // 0'dan daha uzak ama azıcık game.addChild(background); var bg2 = LK.getAsset('bg2', { anchorX: 0.5, anchorY: 0.5, x: centerX() + 2807.2, y: groundY / 2 }); bg2.zIndex = 0; bg2.velocityY = 0; bg2.gravity = 0.033; bg2.jumpStrength = 0.66; game.addChild(bg2); var sky = LK.getAsset('sky', { anchorX: 0.5, anchorY: 0, x: centerX(), y: 0 }); sky.zIndex = 2; game.addChild(sky); var groundAsset = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.4, x: centerX(), y: groundY - -25 }); groundAsset.zIndex = 4.1; game.addChild(groundAsset); var ground2Asset = LK.getAsset('ground2', { anchorX: 0.5, anchorY: 0.05, x: centerX(), y: groundY - 40 }); ground2Asset.zIndex = 0.5; game.addChild(ground2Asset); function updateScore() { passCounter++; counterText.setText(passCounter); if (passCounter > 9) { counterText.x = 1315 - 25; // Move 25 pixels to the left } else { counterText.x = 1315; // Reset to original position } } // Karakter bağlı 3D arka plan ve efekt – başlangıçta container y = 2400 (en alt sınır) var background3D = LK.getAsset('3dlikebackground', { anchorX: 0.5, anchorY: 0.5 }); var background3DContainer = new Container(); background3DContainer.offsetY = 0; background3DContainer.velocityY = 0; background3DContainer.gravity = 0.3 * 0.178; //0.6 Ay atmosferi benzeri yer çekimi background3DContainer.jumpStrength = 2.15; // Daha hafif yer çekimi için zıplama kuvveti background3DContainer.isInverted = false; background3DContainer.addChild(background3D); background3DContainer.x = centerX(); // Başlangıçta container'lar en altta (2400) background3DContainer.y = 2350; // Container update: oyun başladığında gravity uygulanır, ve y değeri 2000 ile 2400 arasında clamp edilir. background3DContainer.update = function () { if (!gameStarted) { return; } this.velocityY -= this.gravity; this.y += this.velocityY; this.y = Math.max(1900, Math.min(this.y, 2900)); }; game.addChild(background3DContainer); var bgEffect3D = LK.getAsset('3dbgeffect', { anchorX: 0.5, anchorY: 0.5 }); var bgEffect3DContainer = new Container(); bgEffect3DContainer.offsetY = 0; bgEffect3DContainer.velocityY = 0; bgEffect3DContainer.gravity = 0.3 * 0.178; //0.6 Ay atmosferi benzeri yer çekimi bgEffect3DContainer.jumpStrength = 2.15; // Daha hafif yer çekimi için zıplama kuvveti bgEffect3DContainer.isInverted = false; bgEffect3DContainer.addChild(bgEffect3D); bgEffect3DContainer.x = background3DContainer.x + 2807; bgEffect3DContainer.y = 2350; bgEffect3DContainer.update = function () { if (!gameStarted) { return; } this.velocityY -= this.gravity; this.y += this.velocityY; this.y = Math.max(1900, Math.min(this.y, 2900)); }; game.addChild(bgEffect3DContainer); var underscoreAsset = LK.getAsset('_', { anchorX: 0.5, anchorY: 0.5, x: centerX() + 1000, y: centerY() - 1500 // Moved 500 pixels up }); underscoreAsset.zIndex = 15000; game.addChild(underscoreAsset); underscoreAsset.on('down', function () { underscoreTouchCount++; if (underscoreTouchCount >= 5) { character.preventDeath = true; character.preventTreeDeath = true; } }); game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // Create and add the character var character = game.addChild(new Character()); character.x = centerX(); character.y = centerY(); // Menü konumunu ayarla menuContainer.y += 100; game.addChild(menuContainer); /**** * Helper Functions: Credits, Volume & Records ****/ function createCommonCloseElements(modalWidth, modalHeight) { var closeLabel = LK.getAsset('justX', { anchorX: 0.5, anchorY: 0.5, zIndex: 100000, x: -9, y: 6 }); var radius = 50; var closeButton = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: radius * 2.3 * 1.2, height: radius * 2.3 * 1.2 }); closeButton.zIndex = 10000; closeButton.x = 0; closeButton.y = 0; closeButton.addChild(closeLabel); return closeButton; } function showCredits() { menuOpen = false; var creditsContainer = new Container(); creditsContainer.zIndex = 300; var modalWidth = 1500, modalHeight = 2200; var bg = LK.getAsset('second_menu', { anchorX: 0.5, anchorY: 0.5, width: modalWidth, height: modalHeight, color: 0x000000 }); bg.x = centerX(); bg.y = centerY(); creditsContainer.addChild(bg); var creditsText = new Text2("Game by\nMustafa Talha ŞEN", { fontFamily: "Arial", fontSize: 5000 * 1.03, fill: 0xffffff, align: "center" }); creditsText.anchorX = 0.5; creditsText.anchorY = 0.5; creditsText.x = centerX() - 359; creditsText.y = centerY() - 800 + 40; creditsText.scale.set(3, 3); creditsContainer.addChild(creditsText); game.addChild(creditsContainer); var closeButton = createCommonCloseElements(modalWidth, modalHeight); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230; creditsContainer.addChild(closeButton); closeButton.on('down', function () { game.removeChild(creditsContainer); menuOpen = true; menuContainer.visible = true; }); } function showVolume() { menuOpen = false; var volumeContainer = new Container(); volumeContainer.zIndex = 300; var modalWidth = 1500, modalHeight = 2200; var bg = LK.getAsset('second_menu', { anchorX: 0.5, anchorY: 0.5, width: modalWidth, height: modalHeight, color: 0x000000 }); bg.x = centerX(); bg.y = centerY(); volumeContainer.addChild(bg); var currentMusicName = new Text2("Next Music", { fontFamily: "Arial", fontSize: 5000 * 1.103, fill: 0xffffff, align: "center" }); currentMusicName.anchorX = 0.5; currentMusicName.anchorY = 0.5; currentMusicName.x = centerX() - 250; currentMusicName.y = centerY() - 650 + 40 - 300 + 100; currentMusicName.scale.set(3, 3); volumeContainer.addChild(currentMusicName); var musicButton = LK.getAsset('Musicbutton', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 280 + 250, y: centerY() - 350 + 40 - 150 }); musicButton.on('down', function () { playNextMusic(); }); volumeContainer.addChild(musicButton); game.addChild(volumeContainer); var closeButton = createCommonCloseElements(modalWidth, modalHeight); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230; volumeContainer.addChild(closeButton); closeButton.on('down', function () { game.removeChild(volumeContainer); menuOpen = true; menuContainer.visible = true; }); } function showRecords() { menuOpen = false; var recordsContainer = new Container(); recordsContainer.zIndex = 300; var modalWidth = 1500, modalHeight = 2200; var bg = LK.getAsset('second_menu', { anchorX: 0.5, anchorY: 0.5, width: modalWidth, height: modalHeight, color: 0x000000 }); bg.x = centerX(); bg.y = centerY(); recordsContainer.addChild(bg); var recordsTextStr = "Top Scores:\n"; for (var i = 0; i < records.length; i++) { recordsTextStr += i + 1 + ". " + records[i].score + " (Attempt " + records[i].attempt + ")\n"; } if (records.length === 0) { recordsTextStr += "No records yet."; } recordsTextStr += "\nAttempts: " + records.length; recordsTextStr += "\nLast Score: " + lastScore; var recordsText = new Text2(recordsTextStr, { fontFamily: "Arial", fontSize: 5000 * 1.103, fill: 0xffffff, align: "center" }); recordsText.anchorX = 0.5; recordsText.anchorY = 0.5; recordsText.x = centerX() - 280; recordsText.y = centerY() - 850 + 40; recordsText.scale.set(3, 3); recordsContainer.addChild(recordsText); game.addChild(recordsContainer); var closeButton = createCommonCloseElements(modalWidth, modalHeight); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230; recordsContainer.addChild(closeButton); closeButton.on('down', function () { game.removeChild(recordsContainer); menuOpen = true; menuContainer.visible = true; }); } /**** * End Game & Reset Functions ****/ function playNextMusic() { musicCycle++; if (musicCycle === 1) { LK.stopMusic(); LK.playMusic(musicSequence[1]); } else if (musicCycle === 2) { LK.stopMusic(); LK.playMusic(musicSequence[2]); } else if (musicCycle === 3) { LK.stopMusic(); } else { musicCycle = 0; LK.stopMusic(); LK.playMusic(musicSequence[0]); } } // Define menu and game music var menuMusic = 'M_2'; var gameMusic = 'm_1'; var musicSequence = [gameMusic, 'M_2', 'M_3']; var musicCycle = 0; // Play menu music initially LK.playMusic(menuMusic); function endGame() { LK.effects.flashScreen(0xFF0000, 500); LK.getSound('deatheffect').play(); character.velocityY = character.jumpStrength; character.update = function () { if (gameOver) { character.velocityY += character.gravity; character.y += character.velocityY; if (character.y > groundY + character.height) { character.y = groundY + character.height; character.velocityY = 0; } } }; game.children.forEach(function (child) { if (child.velocityX) { child.velocityX = 0; } if (child === background || child === bg2) { LK.setTimeout(function () { child.velocityY = 0; }, 300); } }); game.touchDisabled = true; lastScore = passCounter; records.push({ score: passCounter, attempt: records.length + 1 }); records.sort(function (a, b) { return b.score - a.score; }); if (records.length > 5) { records = records.slice(0, 5); } LK.setTimeout(function () { game.touchDisabled = false; menuOpen = true; menuContainer.visible = true; var startY = groundY + 100; var endY = centerY() - 1270; var animationDuration = 16.5 * 5 / 1.5; var startTime = Date.now(); function animateMenu() { var currentTime = Date.now(); var elapsedTime = currentTime - startTime; var progress = Math.min(elapsedTime / animationDuration, 1); menuContainer.y = startY + (endY - startY) * progress; if (progress < 1) { LK.setTimeout(animateMenu, 16); } } animateMenu(); }, 1700); LK.setTimeout(function () { resetGame(); }, 1750); } function resetGame() { if (gameOverText) { game.removeChild(gameOverText); gameOverText = null; } unflipWorld(); var objectsToRemove = []; game.children.forEach(function (child) { if (child instanceof Tree || child instanceof Tube) { objectsToRemove.push(child); } }); objectsToRemove.forEach(function (obj) { game.removeChild(obj); }); game.removeChild(character); character = game.addChild(new Character()); character.x = centerX(); character.y = centerY(); background.x = centerX(); background.y = groundY / 2; bg2.x = centerX() + 2807.2; bg2.y = groundY / 2; background.velocityX = -3.6; bg2.velocityX = -3.6; bg2.scale.x = 1; gameStarted = false; gameOver = false; character.preventDeath = false; underscoreAsset.preventDeath = false; lastSpawner = null; passCounter = 0; underscoreTouchCount = 0; counterText.setText(passCounter); // Play menu music again after reset LK.stopMusic(); LK.playMusic(menuMusic); // Reset container'ların konumunu ve velocity değerlerini background3DContainer.y = 2350; bgEffect3DContainer.y = 2350; background3DContainer.velocityY = 0; bgEffect3DContainer.velocityY = 0; } /**** * Eliptik hit testi için yardımcı fonksiyon ****/ function checkEllipseHover(button, lx, ly) { var scaleFactorX = 1; var scaleFactorY = 0.53; var offsetY = 40; var dx = lx - button.x; var dy = ly - (button.y + offsetY); var rx = button.width / 2 * scaleFactorX; var ry = button.height / 2 * scaleFactorY; return dx * dx / (rx * rx) + dy * dy / (ry * ry) <= 1; } /**** * Fare hareketinde hover kontrolü ****/ game.move = function (x, y, obj) { if (!menuOpen) { return; } var localX = x - menuContainer.x; var localY = y - menuContainer.y; // Only highlight if visible (after pocket click) if (playButton.visible) { playButton.alpha = checkEllipseHover(playButton, localX, localY) ? 1 : 0.7; playLabel.alpha = playButton.alpha; } if (volumeButton.visible) { volumeButton.alpha = checkEllipseHover(volumeButton, localX, localY) ? 1 : 0.7; volumeLabel.alpha = volumeButton.alpha; } if (creditsButton.visible) { creditsButton.alpha = checkEllipseHover(creditsButton, localX, localY) ? 1 : 0.7; creditsLabel.alpha = creditsButton.alpha; } if (recordsButton.visible) { recordsButton.alpha = checkEllipseHover(recordsButton, localX, localY) ? 1 : 0.7; recordsLabel.alpha = recordsButton.alpha; } }; /**** * Touch Event ****/ game.down = function (x, y, obj) { if (menuOpen) { var localX = x - menuContainer.x; var localY = y - menuContainer.y; // Only allow button clicks if buttons are visible (after pocket click) if (playButton.visible && checkEllipseHover(playButton, localX, localY)) { var _animateMenu = function animateMenu() { var currentTime = Date.now(); var elapsedTime = currentTime - startTime; var progress = Math.min(elapsedTime / animationDuration, 1); menuContainer.y = startY + (endY - startY) * progress; if (progress < 1) { LK.setTimeout(_animateMenu, 1); } else { menuOpen = false; menuContainer.visible = false; gameWait = true; } }; var animationDuration = 16.5 * 5 * 2 / 1.5; var startTime = Date.now(); var startY = menuContainer.y; var endY = centerY() + 100; _animateMenu(); return; } else if (volumeButton.visible && checkEllipseHover(volumeButton, localX, localY)) { showVolume(); } else if (creditsButton.visible && checkEllipseHover(creditsButton, localX, localY)) { showCredits(); } else if (recordsButton.visible && checkEllipseHover(recordsButton, localX, localY)) { showRecords(); } return; } else if (gameOver) { if (!game.touchDisabled) { menuOpen = true; menuContainer.visible = true; resetGame(); } } else { if (gameWait) { gameWait = false; gameStarted = true; // Stop menu music and play game music LK.stopMusic(); LK.playMusic(gameMusic); var initialTube = new Tube(); game.addChild(initialTube); lastSpawner = initialTube; character.jump(); } else { character.jump(); character.rotation = 0.1; LK.setTimeout(function () { character.rotation = 0; }, 200); } } }; /**** * Game Loop ****/ game.update = function () { game.children.forEach(function (child) { if (child.update) { child.update(); } if (child === background || child === bg2) { if (!gameOver && !menuOpen && gameStarted) { child.x -= 3.0; child.velocityY -= child.gravity; child.y += child.velocityY; } if (child.x < -2807.2 / 2) { child.x += 2807.2 * 2; } } if (child === background3DContainer || child === bgEffect3DContainer) { if (!gameOver && !menuOpen && gameStarted) { child.x -= containerScrollSpeed * 1.2; } if (child.x < -2807.2 / 2) { child.x += 2807.2 * 2; } } }); game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); }; function unflipWorld() { if (!flipped) { return; } flipped = false; character.gravity = 0; character.jumpStrength = 0; zoomEffect(); LK.setTimeout(function () { character.gravity = 0.3; character.jumpStrength = -12; }, 300); background.scale.y *= -1; bg2.scale.y *= -1; sky.scale.y *= -1; groundAsset.scale.y *= -1; ground2Asset.scale.y *= -1; } function zoomEffect() { var originalScale = character.scale.x; character.scale.set(originalScale * 1.2); LK.setTimeout(function () { character.scale.set(originalScale); }, 300); } function flipWorld() { if (flipped) { return; } flipped = true; character.gravity = 0; character.jumpStrength = 0; zoomEffect(); LK.setTimeout(function () { character.gravity = 0.3; character.jumpStrength = -12; }, 300); background.scale.y *= -1; bg2.scale.y *= -1; sky.scale.y *= -1; groundAsset.scale.y *= -1; ground2Asset.scale.y *= -1; }
===================================================================
--- original.js
+++ change.js
@@ -276,104 +276,197 @@
// Oluşturulan container'ı oyuna ekleyelim
game.addChild(myContainer);
var menuContainer = new Container();
menuContainer.zIndex = 200;
-var menuBackground = LK.getAsset('menu_background', {
+// Doraemon body and pocket (use blue/white ellipse and a pocket shape)
+var doraemonBody = LK.getAsset('centerCircle', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX(),
- y: centerY() + 625
+ y: centerY() + 400,
+ scaleX: 7.5,
+ scaleY: 7.5,
+ color: 0x2196f3 // Doraemon blue
});
-menuBackground.zIndex = 1000;
-menuContainer.addChild(menuBackground);
-var menuBackgroundPart = LK.getAsset('menu_background_part', {
+doraemonBody.zIndex = 1000;
+menuContainer.addChild(doraemonBody);
+// Doraemon's pocket (white ellipse)
+var pocket = LK.getAsset('centerCircle', {
anchorX: 0.5,
- anchorY: 0.19,
- x: centerX() - 1030,
- y: centerY() - 2866
+ anchorY: 0.5,
+ x: centerX(),
+ y: centerY() + 700,
+ scaleX: 2.2,
+ scaleY: 1.1,
+ color: 0xffffff
});
-menuBackgroundPart.zIndex = menuBackground.zIndex + 1;
-menuBackground.addChild(menuBackgroundPart);
+pocket.zIndex = 1001;
+menuContainer.addChild(pocket);
+// Red ball (the "magic" ball above the pocket)
+var redBall = LK.getAsset('centerCircle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: centerX(),
+ y: centerY() + 600,
+ scaleX: 0.7,
+ scaleY: 0.7,
+ color: 0xff0000
+});
+redBall.zIndex = 1002;
+menuContainer.addChild(redBall);
+// Hide menu buttons initially
var playButton = LK.getAsset('button_play', {
anchorX: 0.5,
anchorY: 0.5,
- x: centerX() - 20,
- y: centerY() + 205
+ x: centerX(),
+ y: centerY() + 600
});
playButton.visible = false;
menuContainer.addChild(playButton);
var playLabel = new Text2("PLAY", {
- fontFamily: "Arial",
+ fontFamily: "Comic Sans MS",
fontSize: 630.25 * 1.1 * 1.08 * 1.5,
- fill: 0xffffff
+ fill: 0x1565c0,
+ // Doraemon blue
+ fontWeight: "bold",
+ stroke: "#fff",
+ strokeThickness: 12
});
playLabel.anchorX = 0.5;
playLabel.anchorY = 0.5;
-playLabel.x = playButton.x - 45;
-playLabel.y = playButton.y - -25;
-playLabel.visible = true;
-playLabel.zIndex = 1000;
+playLabel.x = playButton.x;
+playLabel.y = playButton.y;
+playLabel.visible = false;
+playLabel.zIndex = 1003;
menuContainer.addChild(playLabel);
var volumeButton = LK.getAsset('button_volume', {
anchorX: 0.5,
anchorY: 0.5,
- x: centerX() - 28,
- y: centerY() + 320
+ x: centerX(),
+ y: centerY() + 700
});
volumeButton.visible = false;
menuContainer.addChild(volumeButton);
var volumeLabel = new Text2("VOLUME", {
- fontFamily: "Arial",
+ fontFamily: "Comic Sans MS",
fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5,
- fill: 0xffffff
+ fill: 0x1565c0,
+ fontWeight: "bold",
+ stroke: "#fff",
+ strokeThickness: 8
});
volumeLabel.anchorX = 0.5;
volumeLabel.anchorY = 0.5;
-volumeLabel.x = volumeButton.x - 58;
-volumeLabel.y = volumeButton.y + 30;
-volumeLabel.visible = true;
-volumeLabel.zIndex = 1000;
+volumeLabel.x = volumeButton.x;
+volumeLabel.y = volumeButton.y;
+volumeLabel.visible = false;
+volumeLabel.zIndex = 1003;
menuContainer.addChild(volumeLabel);
var creditsButton = LK.getAsset('button_credits', {
anchorX: 0.5,
anchorY: 0.5,
- x: centerX() - 30,
- y: centerY() + 429
+ x: centerX(),
+ y: centerY() + 800
});
creditsButton.visible = false;
menuContainer.addChild(creditsButton);
var creditsLabel = new Text2("CREDITS", {
- fontFamily: "Arial",
+ fontFamily: "Comic Sans MS",
fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5,
- fill: 0xffffff
+ fill: 0x1565c0,
+ fontWeight: "bold",
+ stroke: "#fff",
+ strokeThickness: 8
});
creditsLabel.anchorX = 0.5;
creditsLabel.anchorY = 0.5;
-creditsLabel.x = creditsButton.x - 60;
-creditsLabel.y = creditsButton.y + 28;
-creditsLabel.visible = true;
-creditsLabel.zIndex = 1000;
+creditsLabel.x = creditsButton.x;
+creditsLabel.y = creditsButton.y;
+creditsLabel.visible = false;
+creditsLabel.zIndex = 1003;
menuContainer.addChild(creditsLabel);
var recordsButton = LK.getAsset('button_records', {
anchorX: 0.5,
anchorY: 0.5,
- x: centerX() - 30,
- y: centerY() + 540
+ x: centerX(),
+ y: centerY() + 900
});
recordsButton.visible = false;
menuContainer.addChild(recordsButton);
var recordsLabel = new Text2("RECORDS", {
- fontFamily: "Arial",
+ fontFamily: "Comic Sans MS",
fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5,
- fill: 0xffffff
+ fill: 0x1565c0,
+ fontWeight: "bold",
+ stroke: "#fff",
+ strokeThickness: 8
});
recordsLabel.anchorX = 0.5;
recordsLabel.anchorY = 0.5;
-recordsLabel.x = recordsButton.x - 67;
-recordsLabel.y = recordsButton.y + 28;
-recordsLabel.visible = true;
-recordsLabel.zIndex = 1000;
+recordsLabel.x = recordsButton.x;
+recordsLabel.y = recordsButton.y;
+recordsLabel.visible = false;
+recordsLabel.zIndex = 1003;
menuContainer.addChild(recordsLabel);
+// Animate buttons out of pocket on pocket click
+function showPocketMenuButtons() {
+ // Animate red ball up and fade out
+ tween.to(redBall, {
+ y: centerY() + 500,
+ alpha: 0
+ }, 350).start();
+ // Animate buttons up and fade in
+ playButton.visible = true;
+ playLabel.visible = true;
+ volumeButton.visible = true;
+ volumeLabel.visible = true;
+ creditsButton.visible = true;
+ creditsLabel.visible = true;
+ recordsButton.visible = true;
+ recordsLabel.visible = true;
+ // Animate each button and label
+ tween.to(playButton, {
+ y: centerY() + 500
+ }, 350).start();
+ tween.to(playLabel, {
+ y: centerY() + 500,
+ alpha: 1
+ }, 350).start();
+ tween.to(volumeButton, {
+ y: centerY() + 600
+ }, 400).start();
+ tween.to(volumeLabel, {
+ y: centerY() + 600,
+ alpha: 1
+ }, 400).start();
+ tween.to(creditsButton, {
+ y: centerY() + 700
+ }, 450).start();
+ tween.to(creditsLabel, {
+ y: centerY() + 700,
+ alpha: 1
+ }, 450).start();
+ tween.to(recordsButton, {
+ y: centerY() + 800
+ }, 500).start();
+ tween.to(recordsLabel, {
+ y: centerY() + 800,
+ alpha: 1
+ }, 500).start();
+ // Remove pocket click after first use
+ pocket.off('down', showPocketMenuButtons);
+}
+// Only show buttons after pocket is clicked
+playButton.visible = false;
+playLabel.visible = false;
+volumeButton.visible = false;
+volumeLabel.visible = false;
+creditsButton.visible = false;
+creditsLabel.visible = false;
+recordsButton.visible = false;
+recordsLabel.visible = false;
+// Doraemon pocket click triggers menu
+pocket.on('down', showPocketMenuButtons);
var counterText = new Text2('0', {
size: 124.2,
fill: 0xFFFFFF
});
@@ -817,21 +910,35 @@
return;
}
var localX = x - menuContainer.x;
var localY = y - menuContainer.y;
- playButton.visible = checkEllipseHover(playButton, localX, localY);
- volumeButton.visible = checkEllipseHover(volumeButton, localX, localY);
- creditsButton.visible = checkEllipseHover(creditsButton, localX, localY);
- recordsButton.visible = checkEllipseHover(recordsButton, localX, localY);
+ // Only highlight if visible (after pocket click)
+ if (playButton.visible) {
+ playButton.alpha = checkEllipseHover(playButton, localX, localY) ? 1 : 0.7;
+ playLabel.alpha = playButton.alpha;
+ }
+ if (volumeButton.visible) {
+ volumeButton.alpha = checkEllipseHover(volumeButton, localX, localY) ? 1 : 0.7;
+ volumeLabel.alpha = volumeButton.alpha;
+ }
+ if (creditsButton.visible) {
+ creditsButton.alpha = checkEllipseHover(creditsButton, localX, localY) ? 1 : 0.7;
+ creditsLabel.alpha = creditsButton.alpha;
+ }
+ if (recordsButton.visible) {
+ recordsButton.alpha = checkEllipseHover(recordsButton, localX, localY) ? 1 : 0.7;
+ recordsLabel.alpha = recordsButton.alpha;
+ }
};
/****
* Touch Event
****/
game.down = function (x, y, obj) {
if (menuOpen) {
var localX = x - menuContainer.x;
var localY = y - menuContainer.y;
- if (checkEllipseHover(playButton, localX, localY)) {
+ // Only allow button clicks if buttons are visible (after pocket click)
+ if (playButton.visible && checkEllipseHover(playButton, localX, localY)) {
var _animateMenu = function animateMenu() {
var currentTime = Date.now();
var elapsedTime = currentTime - startTime;
var progress = Math.min(elapsedTime / animationDuration, 1);
@@ -849,13 +956,13 @@
var startY = menuContainer.y;
var endY = centerY() + 100;
_animateMenu();
return;
- } else if (checkEllipseHover(volumeButton, localX, localY)) {
+ } else if (volumeButton.visible && checkEllipseHover(volumeButton, localX, localY)) {
showVolume();
- } else if (checkEllipseHover(creditsButton, localX, localY)) {
+ } else if (creditsButton.visible && checkEllipseHover(creditsButton, localX, localY)) {
showCredits();
- } else if (checkEllipseHover(recordsButton, localX, localY)) {
+ } else if (recordsButton.visible && checkEllipseHover(recordsButton, localX, localY)) {
showRecords();
}
return;
} else if (gameOver) {
green theme forest by green tones to the sky , not to much detail just simple tree shadows trees has no details just shadowed green and shadowless places, beautiful view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
crate doraemon flapi bird. In-Game asset. 2d. High contrast. No shadows
Doraemon full budy. In-Game asset. 2d. High contrast. No shadows
Draw Doraemon's door with the word "Başla" written on it.. In-Game asset. 2d. High contrast. No shadows
Draw the dreamy TV from Doraemon, and write "Geliştiren" on it.. In-Game asset. 2d. High contrast. No shadows
Draw the magic mirror from Doraemon, and write "SES" on it.. In-Game asset. 2d. High contrast. No shadows
Use any Doraemon gadget and create a visual. Write "REKORLAR" on it.. In-Game asset. 2d. High contrast. No shadows