User prompt
make menus size same as records when clicked credits
User prompt
when clicked to button volume no text on the menu
User prompt
make same menu open when clicked to volume as the button_records clicked
User prompt
when button volume clicked open second menu like when button records clicked
User prompt
when clicked button close close second menu of volume settings
User prompt
make second menu visivle when touched buttonvolume right now there is nothing
User prompt
when clicked music make second menu visible right now it is not
User prompt
when button volume clicked open second menu
Code edit (4 edits merged)
Please save this source code
User prompt
change volume text into music
User prompt
make volume menu visible
User prompt
make it false
User prompt
make second menu visible
User prompt
move menu background part 4 pixel down
User prompt
move menu background part 50 pixel up 20 pixel right
User prompt
move menu background part 150 pixel up 150 pixel right
User prompt
move menu background part 900 pixel up 600 pixel left
User prompt
move menu background part 900 pixel up 600 pixel left
User prompt
make menu background part child of menu background
Code edit (1 edits merged)
Please save this source code
Code edit (6 edits merged)
Please save this source code
User prompt
move ground and ground2 10 pixel down
Code edit (8 edits merged)
Please save this source code
User prompt
move ground and ground2 50 pixel down
Code edit (3 edits merged)
Please save this source code
/**** * 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; 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; // Ekran dışına çıkma kontrolü if (characterLeft + self.width / 2 < 0 || characterRight - self.width / 2 > screenRight || characterTop + self.height / 2 < 0 || characterBottom - self.height / 2 > groundY) { gameOver = true; endGame(); } // Çarpışma kontrolü: Tube ve Tree 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 { return; } } } } 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) { self.velocityY = self.jumpStrength; LK.getSound('wingeffect').play(); } }; 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 > treeSpawnThreshold && self.x <= treeSpawnThreshold) { self.spawned = true; var newTube = new Tube(); newTube.x = 2048 + 800; 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: 300, height: bottomHeight, flipY: false }); self.topTube = self.attachAsset('tube', { anchorX: 0.5, anchorY: 0.5, width: 300, 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 > tubeSpawnThreshold && self.x <= tubeSpawnThreshold) { self.spawned = true; var newTree = new Tree(); newTree.x = 2048 + 800; 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 ****/ var underscoreAsset = LK.getAsset('_', { anchorX: 0.5, anchorY: 0.5, x: centerX() + 1000, y: centerY() }); 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); }); function createCloseButton() { var closeButtonContainer = new Container(); closeButtonContainer.zIndex = 9999; var closeShape = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: 160 * 0.8, height: 160 * 1.2 }); closeButtonContainer.addChild(closeShape); var closeLabel = LK.getAsset('justX', { anchorX: 0.5, anchorY: 0.5, x: -6, y: 2 }); closeButtonContainer.addChild(closeLabel); return closeButtonContainer; } 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; } 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 updateScore() { passCounter++; counterText.setText(passCounter); if (passCounter % 5 === 0) { if (!flipped) { flipWorld(); } else { unflipWorld(); } } } /**** * 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 underscoreTouchCount = 0; var flipped = false; function centerX() { return 2048 / 2; } function centerY() { return groundY / 2; } tubeSpawnThreshold = centerX() + (screenRight - centerX()) / 2; treeSpawnThreshold = centerX() + 3 * (screenRight - centerX()) / 4; /**** * Menu Setup ****/ var menuContainer = new Container(); menuContainer.zIndex = 200; // Menü arka planları (zIndex değerlerini yükselttim) var menuBackground = LK.getAsset('menu_background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 625 }); menuBackground.zIndex = 1000; // Ön plana almak için yüksek zIndex menuContainer.addChild(menuBackground); var menuBackgroundPart = LK.getAsset('menu_background_part', { anchorX: 0.5, anchorY: 0.19, x: centerX(), y: centerY() - 870 }); menuBackgroundPart.zIndex = menuBackground.zIndex + 1; // 1001 menuBackground.addChild(menuBackgroundPart); // Butonlar ve Label’lar var playButton = LK.getAsset('button_play', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 20, y: centerY() + 205 }); playButton.visible = false; menuContainer.addChild(playButton); var playLabel = new Text2("PLAY", { fontFamily: "Arial", fontSize: 630.25 * 1.1 * 1.08 * 1.5, fill: 0xffffff }); playLabel.anchorX = 0.5; playLabel.anchorY = 0.5; playLabel.x = playButton.x - 45; playLabel.y = playButton.y - -25; playLabel.visible = true; playLabel.zIndex = 1000; menuContainer.addChild(playLabel); var volumeButton = LK.getAsset('button_volume', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 28, y: centerY() + 320 }); volumeButton.visible = false; menuContainer.addChild(volumeButton); var volumeLabel = new Text2("VOLUME", { fontFamily: "Arial", fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5, fill: 0xffffff }); volumeLabel.anchorX = 0.5; volumeLabel.anchorY = 0.5; volumeLabel.x = volumeButton.x - 58; volumeLabel.y = volumeButton.y + 30; volumeLabel.visible = true; volumeLabel.zIndex = 1000; menuContainer.addChild(volumeLabel); var creditsButton = LK.getAsset('button_credits', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 30, y: centerY() + 429 }); creditsButton.visible = false; menuContainer.addChild(creditsButton); var creditsLabel = new Text2("CREDITS", { fontFamily: "Arial", fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5, fill: 0xffffff }); creditsLabel.anchorX = 0.5; creditsLabel.anchorY = 0.5; creditsLabel.x = creditsButton.x - 60; creditsLabel.y = creditsButton.y + 28; creditsLabel.visible = true; creditsLabel.zIndex = 1000; menuContainer.addChild(creditsLabel); var recordsButton = LK.getAsset('button_records', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 30, y: centerY() + 540 }); recordsButton.visible = false; menuContainer.addChild(recordsButton); var recordsLabel = new Text2("RECORDS", { fontFamily: "Arial", fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5, fill: 0xffffff }); recordsLabel.anchorX = 0.5; recordsLabel.anchorY = 0.5; recordsLabel.x = recordsButton.x - 67; recordsLabel.y = recordsButton.y + 28; recordsLabel.visible = true; recordsLabel.zIndex = 1000; menuContainer.addChild(recordsLabel); 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; game.addChild(background); var bg2 = LK.getAsset('bg2', { anchorX: 0.5, anchorY: 0.5, x: centerX() + 2807.2, y: groundY / 2 }); bg2.zIndex = 0; 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); var character = game.addChild(new Character()); character.x = centerX(); character.y = groundY / 2; 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: 10000, x: 6, y: 16 }); 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 { closeLabel: closeLabel, closeButton: closeButton }; } function showCredits() { menuOpen = false; var creditsContainer = new Container(); creditsContainer.zIndex = 300; var modalWidth = 1250, modalHeight = 2000; 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 = createCloseButton(); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 160; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175; closeButton.on('down', function () { game.removeChild(creditsContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); game.addChild(closeButton); } function showVolume() { menuOpen = false; var volumeContainer = new Container(); volumeContainer.zIndex = 300; var modalWidth = 1250, modalHeight = 2000; 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 volumeText = new Text2("Volume Settings", { fontFamily: "Arial", fontSize: 5000 * 1.103, fill: 0xffffff }); volumeText.scale.set(3, 3); volumeText.anchorX = 0.5; volumeText.anchorY = 0.5; volumeText.x = centerX() - 275; volumeText.y = centerY() - 800 + 85; volumeContainer.addChild(volumeText); var volumeSlider = new Container(); volumeSlider.zIndex = 301; volumeSlider.visible = false; volumeSlider.x = centerX() - 250 + 250; volumeSlider.y = centerY() - 200 - 150; var sliderBg = LK.getAsset('button_volume', { anchorX: 0.5, anchorY: 0.5, width: 800, height: 100 }); volumeSlider.addChild(sliderBg); var sliderKnob = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 100 }); sliderKnob.x = 0; volumeSlider.addChild(sliderKnob); sliderKnob.on('down', function (x, y, obj) { var startX = x; var startKnobX = sliderKnob.x; game.move = function (moveX, moveY, moveObj) { var deltaX = moveX - startX; sliderKnob.x = Math.max(-400, Math.min(400, startKnobX + deltaX)); var volume = (sliderKnob.x + 400) / 800; LK.setVolume(volume); }; game.up = function (upX, upY, upObj) { game.move = null; game.up = null; }; }); volumeContainer.addChild(volumeSlider); var closeButton = createCloseButton(); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 159; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175; closeButton.on('down', function () { game.removeChild(volumeContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); game.addChild(closeButton); } 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 = createCloseButton(); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 205; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 195; closeButton.on('down', function () { game.removeChild(recordsContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); game.addChild(closeButton); } /**** * End Game & Reset Functions ****/ function endGame() { LK.effects.flashScreen(0xFF0000, 500); 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; } }); 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 = groundY / 2; background.x = centerX(); bg2.x = centerX() + 2807.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); } /**** * 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; playButton.visible = checkEllipseHover(playButton, localX, localY); volumeButton.visible = checkEllipseHover(volumeButton, localX, localY); creditsButton.visible = checkEllipseHover(creditsButton, localX, localY); recordsButton.visible = checkEllipseHover(recordsButton, localX, localY); }; /**** * 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)) { 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 (checkEllipseHover(volumeButton, localX, localY)) { showVolume(); } else if (checkEllipseHover(creditsButton, localX, localY)) { showCredits(); } else if (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; 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 -= 7.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); }); };
===================================================================
--- original.js
+++ change.js
@@ -44,13 +44,11 @@
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) {
- // Check if not intersecting with underscore asset and preventDeath is not true
gameOver = true;
endGame();
} else {
- // If intersecting with underscore asset or preventDeath is true, do not trigger game over
return;
}
}
}
@@ -61,9 +59,8 @@
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) {
- // Check if not intersecting with underscore asset and preventTreeDeath is not true
gameOver = true;
endGame();
}
}
@@ -128,18 +125,16 @@
self.prevX = self.x;
self.update = function () {
if (gameStarted && !gameOver) {
self.x += self.velocityX;
- // Sırayla ağaç-boru üretimi
if (!self.spawned && self.prevX > treeSpawnThreshold && self.x <= treeSpawnThreshold) {
self.spawned = true;
var newTube = new Tube();
newTube.x = 2048 + 800;
game.addChild(newTube);
lastSpawner = newTube;
}
self.prevX = self.x;
- // Geçme sayacı
if (!self.passed && character.x > self.x + self.bottomTree.width / 2) {
self.passed = true;
updateScore();
}
@@ -183,18 +178,16 @@
if (self.velocityX === 0) {
background.velocityX = 0;
bg2.velocityX = 0;
}
- // Sırayla boru-ağaç üretimi
if (!self.spawned && self.prevX > tubeSpawnThreshold && self.x <= tubeSpawnThreshold) {
self.spawned = true;
var newTree = new Tree();
newTree.x = 2048 + 800;
game.addChild(newTree);
lastSpawner = newTree;
}
self.prevX = self.x;
- // Geçme sayacı
if (!self.passed && character.x > self.x + self.bottomTube.width / 2) {
self.passed = true;
updateScore();
}
@@ -220,78 +213,62 @@
y: centerY()
});
underscoreAsset.zIndex = 15000;
game.addChild(underscoreAsset);
-// Add click event to underscore asset
underscoreAsset.on('down', function () {
- // Increment the touch counter
underscoreTouchCount++;
- // Enable preventDeath if touched 5 times
if (underscoreTouchCount >= 5) {
character.preventDeath = true;
- character.preventTreeDeath = true; // New flag to prevent death by tree
+ character.preventTreeDeath = true;
}
});
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
function createCloseButton() {
- // Close button’un kendi container’ı:
var closeButtonContainer = new Container();
- closeButtonContainer.zIndex = 9999; // Diğer her şeyin üstünde olsun
- // Close butonu için ellipse (shape)
+ closeButtonContainer.zIndex = 9999;
var closeShape = LK.getAsset('button_close', {
anchorX: 0.5,
anchorY: 0.5,
width: 160 * 0.8,
- // Adjusted width to 80% of original
- height: 160 * 1.2 // Adjusted height to 120% of original
+ height: 160 * 1.2
});
closeButtonContainer.addChild(closeShape);
- // “X” metni
var closeLabel = LK.getAsset('justX', {
anchorX: 0.5,
anchorY: 0.5,
x: -6,
- // Moved 4 pixels left
- y: 2 // Moved 4 pixels up
+ y: 2
});
closeButtonContainer.addChild(closeLabel);
return closeButtonContainer;
}
function zoomEffect() {
- // Mevcut scale değeri (örneğin orijinal 1)
var originalScale = character.scale.x;
- // Zoom in: %20 artış
character.scale.set(originalScale * 1.2);
- // 300ms sonra zoom out yap, orijinal scale'e dön
LK.setTimeout(function () {
character.scale.set(originalScale);
}, 300);
}
-// Dünyayı ters döndürme (flip) fonksiyonu – 0.2 saniye boyunca jump/gravity devre dışı
function flipWorld() {
if (flipped) {
return;
}
flipped = true;
- // 0.3 saniye boyunca karakterin jump ve gravity etkilerini devre dışı bırak
character.gravity = 0;
character.jumpStrength = 0;
zoomEffect();
LK.setTimeout(function () {
- // Ters dünyada: gravity -0.3, jumpStrength 12
character.gravity = -0.3;
character.jumpStrength = 12;
}, 300);
- // Dünya elemanlarını ters çevir (sadece scale yöntemiyle)
background.scale.y *= -1;
bg2.scale.y *= -1;
sky.scale.y *= -1;
groundAsset.scale.y *= -1;
ground2Asset.scale.y *= -1;
}
-// Dünyayı eski hâline döndürme (unflip) fonksiyonu – 0.2 saniye boyunca jump/gravity devre dışı
function unflipWorld() {
if (!flipped) {
return;
}
@@ -299,20 +276,17 @@
character.gravity = 0;
character.jumpStrength = 0;
zoomEffect();
LK.setTimeout(function () {
- // Normal dünyada: gravity 0.3, jumpStrength -12
character.gravity = 0.3;
character.jumpStrength = -12;
}, 300);
- // Dünya elemanlarını yeniden ters çevirerek orijinal haline döndür
background.scale.y *= -1;
bg2.scale.y *= -1;
sky.scale.y *= -1;
groundAsset.scale.y *= -1;
ground2Asset.scale.y *= -1;
}
-// Skoru güncelleme fonksiyonu – Her 5 skorda flip/unflip toggle
function updateScore() {
passCounter++;
counterText.setText(passCounter);
if (passCounter % 5 === 0) {
@@ -328,22 +302,21 @@
****/
var groundY = 2732;
var menuOpen = true;
var volumeOn = true;
-var records = []; // En iyi 5 skoru saklar
+var records = [];
var gapOffset = 400;
var gameStarted = false;
var gameOver = false;
-var gameWait = false; // Oyun menüden çıkıp da henüz başlamamışken true olacak.
+var gameWait = false;
var screenRight = 2048;
var totalUnits = 10;
var tubeSpawnThreshold, treeSpawnThreshold;
var lastSpawner = null;
var gameOverText = null;
var passCounter = 0;
-var lastScore = 0; // Global lastScore variable
-var underscoreTouchCount = 0; // Counter for underscore asset touches
-// Flip durumunu takip eden bayrak
+var lastScore = 0;
+var underscoreTouchCount = 0;
var flipped = false;
function centerX() {
return 2048 / 2;
}
@@ -356,27 +329,26 @@
* Menu Setup
****/
var menuContainer = new Container();
menuContainer.zIndex = 200;
-// Menü arka planları
+// Menü arka planları (zIndex değerlerini yükselttim)
var menuBackground = LK.getAsset('menu_background', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX(),
y: centerY() + 625
});
-menuBackground.zIndex = 199;
+menuBackground.zIndex = 1000; // Ön plana almak için yüksek zIndex
menuContainer.addChild(menuBackground);
var menuBackgroundPart = LK.getAsset('menu_background_part', {
anchorX: 0.5,
anchorY: 0.19,
x: centerX(),
y: centerY() - 870
});
-menuBackgroundPart.zIndex = menuBackground.zIndex + 1; // 201
-menuContainer.addChild(menuBackgroundPart);
+menuBackgroundPart.zIndex = menuBackground.zIndex + 1; // 1001
+menuBackground.addChild(menuBackgroundPart);
// Butonlar ve Label’lar
-// PLAY
var playButton = LK.getAsset('button_play', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 20,
@@ -395,9 +367,8 @@
playLabel.y = playButton.y - -25;
playLabel.visible = true;
playLabel.zIndex = 1000;
menuContainer.addChild(playLabel);
-// VOLUME
var volumeButton = LK.getAsset('button_volume', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 28,
@@ -416,9 +387,8 @@
volumeLabel.y = volumeButton.y + 30;
volumeLabel.visible = true;
volumeLabel.zIndex = 1000;
menuContainer.addChild(volumeLabel);
-// CREDITS
var creditsButton = LK.getAsset('button_credits', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
@@ -437,9 +407,8 @@
creditsLabel.y = creditsButton.y + 28;
creditsLabel.visible = true;
creditsLabel.zIndex = 1000;
menuContainer.addChild(creditsLabel);
-// RECORDS
var recordsButton = LK.getAsset('button_records', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
@@ -458,18 +427,16 @@
recordsLabel.y = recordsButton.y + 28;
recordsLabel.visible = true;
recordsLabel.zIndex = 1000;
menuContainer.addChild(recordsLabel);
-// Ekranda sayacımız
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);
-// Arkaplanlar
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX(),
@@ -480,9 +447,8 @@
var bg2 = LK.getAsset('bg2', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() + 2807.2,
- // Position bg2 to the right of the background
y: groundY / 2
});
bg2.zIndex = 0;
game.addChild(bg2);
@@ -495,9 +461,9 @@
sky.zIndex = 2;
game.addChild(sky);
var groundAsset = LK.getAsset('ground', {
anchorX: 0.5,
- anchorY: 0.5,
+ anchorY: 0.4,
x: centerX(),
y: groundY - -25
});
groundAsset.zIndex = 4.1;
@@ -509,13 +475,11 @@
y: groundY - 40
});
ground2Asset.zIndex = 0.5;
game.addChild(ground2Asset);
-// Karakteri ekle
var character = game.addChild(new Character());
character.x = centerX();
character.y = groundY / 2;
-// Menü container'ı biraz aşağı kaydırma
menuContainer.y += 100;
game.addChild(menuContainer);
/****
* Helper Functions: Credits, Volume & Records
@@ -525,10 +489,9 @@
anchorX: 0.5,
anchorY: 0.5,
zIndex: 10000,
x: 6,
- // Moved 4 pixels left
- y: 16 // Moved 4 pixels up
+ y: 16
});
var radius = 50;
var closeButton = LK.getAsset('button_close', {
anchorX: 0.5,
@@ -536,18 +499,17 @@
width: radius * 2.3 * 1.2,
height: radius * 2.3 * 1.2
});
closeButton.zIndex = 10000;
- closeButton.x = 0; // Center the button horizontally
- closeButton.y = 0; // Center the button vertically
+ closeButton.x = 0;
+ closeButton.y = 0;
closeButton.addChild(closeLabel);
return {
closeLabel: closeLabel,
closeButton: closeButton
};
}
function showCredits() {
- // Disable menu interaction when modal is opened
menuOpen = false;
var creditsContainer = new Container();
creditsContainer.zIndex = 300;
var modalWidth = 1250,
@@ -573,28 +535,21 @@
creditsText.x = centerX() - 359;
creditsText.y = centerY() - 800 + 40;
creditsText.scale.set(3, 3);
creditsContainer.addChild(creditsText);
- // 5) creditsContainer’ı oyuna ekle
game.addChild(creditsContainer);
- // 6) Close butonunu tamamen bağımsız ekle
var closeButton = createCloseButton();
- // Örneğin, modal’ın sağ üst köşesi olsun
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 160;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175;
- // Tıklanınca hem creditsContainer’ı hem close butonunu kaldır
closeButton.on('down', function () {
game.removeChild(creditsContainer);
game.removeChild(closeButton);
- // Enable menu interaction when modal is closed
menuOpen = true;
menuContainer.visible = true;
});
- // Close butonunu da oyuna ekle
game.addChild(closeButton);
}
function showVolume() {
- // Disable menu interaction when modal is opened
menuOpen = false;
var volumeContainer = new Container();
volumeContainer.zIndex = 300;
var modalWidth = 1250,
@@ -619,41 +574,34 @@
volumeText.anchorY = 0.5;
volumeText.x = centerX() - 275;
volumeText.y = centerY() - 800 + 85;
volumeContainer.addChild(volumeText);
- // Container’ı oyuna ekle
- game.addChild(volumeContainer);
- // Create a slider for volume control
var volumeSlider = new Container();
volumeSlider.zIndex = 301;
volumeSlider.visible = false;
volumeSlider.x = centerX() - 250 + 250;
volumeSlider.y = centerY() - 200 - 150;
- // Create a background for the slider
var sliderBg = LK.getAsset('button_volume', {
anchorX: 0.5,
anchorY: 0.5,
width: 800,
height: 100
});
volumeSlider.addChild(sliderBg);
- // Create a draggable knob for the slider
var sliderKnob = LK.getAsset('button_close', {
anchorX: 0.5,
anchorY: 0.5,
width: 100,
height: 100
});
- sliderKnob.x = 0; // Start in the middle
+ sliderKnob.x = 0;
volumeSlider.addChild(sliderKnob);
- // Add drag functionality to the knob
sliderKnob.on('down', function (x, y, obj) {
var startX = x;
var startKnobX = sliderKnob.x;
game.move = function (moveX, moveY, moveObj) {
var deltaX = moveX - startX;
sliderKnob.x = Math.max(-400, Math.min(400, startKnobX + deltaX));
- // Calculate volume based on knob position
var volume = (sliderKnob.x + 400) / 800;
LK.setVolume(volume);
};
game.up = function (upX, upY, upObj) {
@@ -661,23 +609,20 @@
game.up = null;
};
});
volumeContainer.addChild(volumeSlider);
- // Close butonu bağımsız
var closeButton = createCloseButton();
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 159;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175;
closeButton.on('down', function () {
game.removeChild(volumeContainer);
game.removeChild(closeButton);
- // Enable menu interaction when modal is closed
menuOpen = true;
menuContainer.visible = true;
});
game.addChild(closeButton);
}
function showRecords() {
- // Disable menu interaction when modal is opened
menuOpen = false;
var recordsContainer = new Container();
recordsContainer.zIndex = 300;
var modalWidth = 1500,
@@ -712,18 +657,15 @@
recordsText.x = centerX() - 280;
recordsText.y = centerY() - 850 + 40;
recordsText.scale.set(3, 3);
recordsContainer.addChild(recordsText);
- // Container’ı oyuna ekle
game.addChild(recordsContainer);
- // Close butonu bağımsız
var closeButton = createCloseButton();
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 205;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 195;
closeButton.on('down', function () {
game.removeChild(recordsContainer);
game.removeChild(closeButton);
- // Enable menu interaction when modal is closed
menuOpen = true;
menuContainer.visible = true;
});
game.addChild(closeButton);
@@ -788,9 +730,8 @@
if (gameOverText) {
game.removeChild(gameOverText);
gameOverText = null;
}
- // Flip'i eski hâline döndür
unflipWorld();
var objectsToRemove = [];
game.children.forEach(function (child) {
if (child instanceof Tree || child instanceof Tube) {
@@ -803,21 +744,20 @@
game.removeChild(character);
character = game.addChild(new Character());
character.x = centerX();
character.y = groundY / 2;
- // Reset background and bg2 positions
background.x = centerX();
bg2.x = centerX() + 2807.2;
background.velocityX = -3.6;
bg2.velocityX = -3.6;
- bg2.scale.x = 1; // Ensure bg2 is not flipped horizontally
+ bg2.scale.x = 1;
gameStarted = false;
gameOver = false;
- character.preventDeath = false; // Reset preventDeath flag
- underscoreAsset.preventDeath = false; // Reset preventDeath flag for underscore asset
+ character.preventDeath = false;
+ underscoreAsset.preventDeath = false;
lastSpawner = null;
passCounter = 0;
- underscoreTouchCount = 0; // Reset underscore touch count
+ underscoreTouchCount = 0;
counterText.setText(passCounter);
}
/****
* Eliptik hit testi için yardımcı fonksiyon
@@ -837,9 +777,9 @@
****/
game.move = function (x, y, obj) {
if (!menuOpen) {
return;
- } // Modal açıkken hover efekti çalışmasın.
+ }
var localX = x - menuContainer.x;
var localY = y - menuContainer.y;
playButton.visible = checkEllipseHover(playButton, localX, localY);
volumeButton.visible = checkEllipseHover(volumeButton, localX, localY);
@@ -911,15 +851,12 @@
game.children.forEach(function (child) {
if (child.update) {
child.update();
}
- // Move background and bg2 to the left
if (child === background || child === bg2) {
if (!gameOver && !menuOpen && gameStarted) {
- // Only move if game is not over
- child.x -= 7.2; // Move left by 5.0 units per frame to increase speed
+ child.x -= 7.2;
}
- // Reset position if moved off screen
if (child.x < -2807.2 / 2) {
child.x += 2807.2 * 2;
}
}