Code edit (1 edits merged)
Please save this source code
User prompt
The main menu background is missing. Please bring it back. Also, can you add the animation where the buttons come out of the pocket?
User prompt
Remove the button texts.
User prompt
Remove the button texts.
User prompt
Align the button texts with the button images. The texts should be centered within the images
Code edit (5 edits merged)
Please save this source code
User prompt
Create an animation where the buttons come out of the pocket. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Move the pocket button to the very bottom.
User prompt
You need to move the Button_Records image to the right, and I see that the button texts are not centered on the button visuals — please center them. Also, move the pocket button slightly down and a bit less to the left.
User prompt
Move the text on the button slightly to the right, and shift the Records button a bit to the right as well.
User prompt
Move the buttons down a bit; they are not visible. Also, enlarge the text slightly and center it on the button.
User prompt
It looks good, but the spacing between them should be a bit larger.
User prompt
Don’t place them vertically; arrange them in a scattered circle, and position them at the top.
User prompt
Align the buttons in a straight line with spacing between them.
Code edit (1 edits merged)
Please save this source code
User prompt
Can you fix the appearance? Create and use an image of a normal Doraemon standing upright with visible pockets.
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'return groundY / 2;' Line Number: 285 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'return groundY / 2;' Line Number: 284
Remix started
Please fix the bug: 'ReferenceError: tween is not defined' in or related to this line: 'tween.to(redBall, {' Line Number: 445 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * 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 ****/ // Import tween plugin for menu button animations /**** * Global Variables & Helper Functions ****/ // Doraemon full body image (standing upright with visible pocket) 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() { // Returns the vertical center of the game area 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; // Add menu background image behind everything in menuContainer var menuBg = LK.getAsset('menu_background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 200, scaleX: 2.1, scaleY: 2.1 }); menuBg.zIndex = 0; menuContainer.addChild(menuBg); // Doraemon full body image (standing upright with visible pocket) var doraemonBody = LK.getAsset('doraemon_full', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 400, scaleX: 2.2, scaleY: 2.2 }); doraemonBody.zIndex = 1000; menuContainer.addChild(doraemonBody); // Doraemon's pocket area (for click detection, invisible, overlays the pocket on the image) // Move pocket button to the very bottom of the screen var pocket = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 40, y: groundY - 120, // Place at the very bottom, with a small margin scaleX: 1.1, scaleY: 0.6, color: 0xffffff }); pocket.alpha = 0.001; // Make the pocket hit area invisible 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 // Button circular scatter parameters var buttonCircleRadius = 570; // Increased radius for larger spacing var buttonCircleCenterY = 700; // Moved down so buttons are visible var buttonCircleCenterX = centerX(); var buttonAngles = [-Math.PI / 2, // Top (Play) -Math.PI / 2 + Math.PI / 5, // Top-right (Volume) - wider angle -Math.PI / 2 - Math.PI / 5, // Top-left (Credits) - wider angle -Math.PI / 2 + Math.PI / 2.7 // Farther right (Records) - more spread ]; // Play Button var playButton = LK.getAsset('button_play', { anchorX: 0.5, anchorY: 0.5, x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[0]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[0]) }); playButton.visible = false; menuContainer.addChild(playButton); var volumeButton = LK.getAsset('button_volume', { anchorX: 0.5, anchorY: 0.5, x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[1]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[1]) }); volumeButton.visible = false; menuContainer.addChild(volumeButton); // Credits Button var creditsButton = LK.getAsset('button_credits', { anchorX: 0.5, anchorY: 0.5, x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[2]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[2]) }); creditsButton.visible = false; menuContainer.addChild(creditsButton); // Records Button var recordsButton = LK.getAsset('button_records', { anchorX: 0.5, anchorY: 0.5, x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[3]) + 120, y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[3]) }); recordsButton.visible = false; menuContainer.addChild(recordsButton); // Animate buttons out of pocket on pocket click function showPocketMenuButtons() { // Animate red ball up and fade out tween(redBall, { y: buttonCircleCenterY - 100, alpha: 0 }, { duration: 350 }); // Animate each button from the pocket position to their scattered circle positions and fade in var pocketX = pocket.x; var pocketY = pocket.y; // Set initial button positions to pocket and alpha to 0 playButton.x = pocketX; playButton.y = pocketY; playButton.alpha = 0; playButton.visible = true; volumeButton.x = pocketX; volumeButton.y = pocketY; volumeButton.alpha = 0; volumeButton.visible = true; creditsButton.x = pocketX; creditsButton.y = pocketY; creditsButton.alpha = 0; creditsButton.visible = true; recordsButton.x = pocketX; recordsButton.y = pocketY; recordsButton.alpha = 0; recordsButton.visible = true; // Animate to their final positions and fade in tween(playButton, { x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[0]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[0]), alpha: 1 }, { duration: 350 }); tween(volumeButton, { x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[1]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[1]), alpha: 1 }, { duration: 400 }); tween(creditsButton, { x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[2]), y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[2]), alpha: 1 }, { duration: 450 }); tween(recordsButton, { x: buttonCircleCenterX + buttonCircleRadius * Math.cos(buttonAngles[3]) + 120, y: buttonCircleCenterY + buttonCircleRadius * Math.sin(buttonAngles[3]), alpha: 1 }, { duration: 500 }); // Remove pocket click after first use pocket.off('down', showPocketMenuButtons); } // Only show buttons after pocket is clicked playButton.visible = false; playButton.alpha = 0; volumeButton.visible = false; volumeButton.alpha = 0; creditsButton.visible = false; creditsButton.alpha = 0; recordsButton.visible = false; recordsButton.alpha = 0; // 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\nHarun Özdemir", { 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; } if (volumeButton.visible) { volumeButton.alpha = checkEllipseHover(volumeButton, localX, localY) ? 1 : 0.7; } if (creditsButton.visible) { creditsButton.alpha = checkEllipseHover(creditsButton, localX, localY) ? 1 : 0.7; } if (recordsButton.visible) { recordsButton.alpha = checkEllipseHover(recordsButton, localX, localY) ? 1 : 0.7; } }; /**** * 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
@@ -221,13 +221,13 @@
/****
* Game Code
****/
-// Doraemon full body image (standing upright with visible pocket)
+// Import tween plugin for menu button animations
/****
* Global Variables & Helper Functions
****/
-// Import tween plugin for menu button animations
+// Doraemon full body image (standing upright with visible pocket)
var groundY = 2732;
var menuOpen = true;
var volumeOn = true;
var records = [];
@@ -628,9 +628,9 @@
});
bg.x = centerX();
bg.y = centerY();
creditsContainer.addChild(bg);
- var creditsText = new Text2("Game by\nMustafa Talha ŞEN", {
+ var creditsText = new Text2("Game by\nHarun Özdemir", {
fontFamily: "Arial",
fontSize: 5000 * 1.03,
fill: 0xffffff,
align: "center"
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