User prompt
make tube assets width %5 thinner
User prompt
Both the Tree and Tube classes are defined with similar logic for creating top and bottom elements, but there are some subtle differences in how their dimensions are set: Same width setting but different visual impact: Both classes set width: 300 for their elements: javascriptCopyself.bottomTube = self.attachAsset('tube', { width: 300, // other properties }); javascriptCopyself.bottomTree = self.attachAsset('tree', { width: 300, // other properties }); Different source images with different proportions: In your asset initialization, I noticed that the original images have vastly different dimensions: javascriptCopyLK.init.image('tree', {width:1100, height:11000, id:'67d4f28b88248ab681d8fa7a', flipY:1}) LK.init.image('tube', {width:11000, height:110000, id:'67d4f6f57aa9ff058570371d', flipY:1}) The tube's original dimensions (11000×110000) are 10 times larger than the tree's (1100×11000) When these images are scaled down to 300 width, they maintain their original aspect ratios, making the tube appear larger/longer Identical code for height calculations: Both objects use the same logic to determine heights: javascriptCopyvar bottomUnit = Math.floor(Math.random() * 8) + 1; var topUnit = 9 - bottomUnit; var unitSize = groundY / totalUnits; var bottomHeight = bottomUnit * unitSize; var topHeight = topUnit * unitSize; To make them appear the same size, you could: Adjust the width setting for the tree to make it match the tube's visual appearance: javascriptCopyself.bottomTree = self.attachAsset('tree', { width: 300 * [scaling_factor], // Experiment with a scaling factor // other properties }); Or adjust the tube's width to match the tree: javascriptCopyself.bottomTube = self.attachAsset('tube', { width: 300 * [inverse_scaling_factor], // Make it smaller // other properties }); The difference is primarily due to the source images having different proportions, which affects how they appear when displayed at the same width of 300 pixels.
User prompt
score count 9 dan yüksek bir değer olduğu süre boyunca normal score counter asseti kendi konumunun 25 pixel sol tarafında yer alsın
User prompt
score count 9 dan yüksek bir değer olduğu süre boyunca normal score counter asseti kendi konumunun 15 pixel sol tarafında yer alsın
User prompt
score count 9 dan yüksek bir değer olduğu süre boyunca normal konumunun 15 pixel sol tarafında yer alsın
User prompt
We can adjust this by modifying the spawn position of new objects. Currently, all new tubes and trees are placed at 2048 + 800 on the x-axis. By reducing this value, we can bring the obstacles closer together. Here's how to make this change: javascriptCopy// Change this in both the Tree and Tube classes // Instead of: // newTube.x = 2048 + 800; // AND // newTree.x = 2048 + 800; // Use a smaller value, for example: newTube.x = 2048 + 640; // Reduced from 800 to 640 (80% of original spacing) // And similarly for trees: newTree.x = 2048 + 640; You can adjust the value 640 up or down to get exactly the spacing you want. If you want precisely 8 units of space compared to the previous 10 units: javascriptCopy// In the Tree class update method: var newTube = new Tube(); newTube.x = 2048 + 640; // 80% of 800 = 640 (8 units vs 10 units) game.addChild(newTube); // In the Tube class update method: var newTree = new Tree(); newTree.x = 2048 + 640; // Same smaller value for consistent spacing game.addChild(newTree); This modification ensures that: All objects spawn at the same threshold point (keeping consistency) The spacing is tighter at 8 units instead of 10 units (making the game more challenging but with predictable spacing) If 640 doesn't give you exactly the spacing you want, you can adjust it until you find the perfect distance between obstacles.
User prompt
birazcık daha yavaşlat
User prompt
biraz yavaşlat
User prompt
daha hızlı yap
User prompt
yavaşlat onları
User prompt
dahada arttıralım 2 puan kadar
User prompt
hızlarını biraz arttıralım 0.5 kadar
User prompt
Looking at your code, I see why the distances between tubes and trees might appear inconsistent. The issue lies in how the spawn thresholds are defined and how the objects trigger the creation of each other. Currently, your code has two different spawn thresholds: tubeSpawnThreshold = centerX() + (screenRight - centerX()) / 2 treeSpawnThreshold = centerX() + 3 * (screenRight - centerX()) / 4 This means tubes and trees check for spawning new objects at different x-positions, which creates the inconsistent distances. Here's how to fix this: Use a single spawn threshold for both object types: javascriptCopy// Replace the two separate thresholds with one common threshold var objectSpawnThreshold = centerX() + (screenRight - centerX()) / 2; // Then in your code, replace all instances of tubeSpawnThreshold and treeSpawnThreshold with objectSpawnThreshold Update the spawn check code in both the Tree and Tube classes to use this common threshold: javascriptCopy// In the Tree class update method: if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) { self.spawned = true; var newTube = new Tube(); newTube.x = 2048 + 800; // Always the same starting position game.addChild(newTube); lastSpawner = newTube; } // And in the Tube class update method: if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) { self.spawned = true; var newTree = new Tree(); newTree.x = 2048 + 800; // Always the same starting position game.addChild(newTree); lastSpawner = newTree; } This will ensure that both tubes and trees spawn new objects at exactly the same position threshold, and each new object will start from the same x-position (2048 + 800). This should make the distance between all objects consistent.
User prompt
Tree ve Tube nesneleri için background’dan farklı olarak zıplama ve yer çekimi (gravity) etkisi eklemek için, her iki nesneye de birer vertical hız (velocityY), yer çekimi (gravity) ve zıplama kuvveti (jumpStrength) tanımlamalısınız. Bu nesnelerin update fonksiyonlarında, her frame'de: Gravity uygulama: Her frame velocityY’ye gravity değerini ekleyip, y konumunu velocityY kadar arttırarak nesnenin aşağı çekilmesini sağlayın. Örnek: js Kopyala Düzenle tree.velocityY += tree.gravity; tree.y += tree.velocityY; Zıplama: Zıplama anında velocityY’yi jumpStrength ile ayarlayarak nesnenin yukarı doğru hareket etmesini tetikleyin. Örnek: js Kopyala Düzenle function jumpTree() { tree.velocityY = tree.jumpStrength; } Böylece Tree ve Tube, zıpladığında yukarı çıkacak ve sonrasında gravity etkisiyle yavaşça aşağı inecektir. Background gibi sürekli hareket eden fakat gravity etkisi almayan nesnelere bu işlemi uygulamayın, böylece sadece Tree ve Tube doğal zıplama ve düşme hareketini sergilemiş olur.
Code edit (3 edits merged)
Please save this source code
User prompt
flip world koduna dair her şey 5 puanda bir aktifleşsin
User prompt
move _ named asset 500 pixel up
User prompt
move _ named asset 500 pixel up
User prompt
move _ named asset 500 pixel up
Code edit (1 edits merged)
Please save this source code
/**** * Classes ****/ /**** Classes ****/ // Character: Ekranın ortasında kalır, ama zıplama hareketi hesaplanıp delta olarak diğer nesnelere uygulanır. 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; // update: delta hesaplanır, karakter y'si sabit center; delta diğer moveWithCamera nesnelere eklenir. self.update = function () { if (gameStarted && !gameOver) { self.velocityY += self.gravity; var intendedY = self.y + self.velocityY; var delta = intendedY - centerY(); // Karakter hep ekranın ortasında kalsın: self.y = centerY(); // moveWithCamera özelliğine sahip nesnelere delta uygula: game.children.forEach(function (child) { if (child !== self && child.moveWithCamera === true) { child.y += delta; } }); // Çarpışma kontrolleri – mevcut konumlara göre yapılmaya devam edebilir: 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 < 0 || characterRight > screenRight || characterTop < 0 || characterBottom > groundY) { gameOver = true; endGame(); } // Tube ve Tree ile çarpışma kontrolü 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(); // Eğer arka plan gibi nesnelerin ayrı jump hareketleri varsa: [background, bg2, background3DContainer, bgEffect3DContainer].forEach(function (obj) { obj.velocityY = obj.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; // Bu nesne de dünya hareketine dahil olsun: self.moveWithCamera = true; self.velocityY = 0; self.gravity = 0.3; self.jumpStrength = -12.1; self.update = function () { if (gameStarted && !gameOver) { self.velocityY += self.gravity; self.y += self.velocityY; 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.moveWithCamera = true; self.velocityY = 0; self.gravity = 0.3; self.jumpStrength = -12.1; self.update = function () { if (gameStarted && !gameOver) { self.velocityY += self.gravity; self.y += self.velocityY; 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 ****/ /**** Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ /**** Assets ****/ /**** 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; } tubeSpawnThreshold = centerX() + (screenRight - centerX()) / 2; treeSpawnThreshold = centerX() + 3 * (screenRight - centerX()) / 4; function updateScore() { passCounter++; counterText.setText(passCounter); } /**** Örnek Container (UI dışı, hareket eden nesneler değil) ****/ var myContainer = new Container(); myContainer.x = centerX(); // Ekranın yatay ortasında myContainer.y = 1900; // Başlangıçta y = 1900 // Sabit yukarı doğru hareket hızı var containerUpwardSpeed = -0.5; // Her tıklamada uygulanacak aşağı kayma var extraDownDelta = 50; myContainer.update = function () { if (gameStarted) { this.y += containerUpwardSpeed; if (this.y < 100) { this.y = 100; } } }; myContainer.on('down', function () { this.y += extraDownDelta; if (this.y > 2600) { this.y = 2600; } }); game.addChild(myContainer); /**** Menü Elemanları ****/ var menuContainer = new Container(); menuContainer.zIndex = 200; menuContainer.moveWithCamera = false; var menuBackground = LK.getAsset('menu_background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() + 625 }); menuBackground.zIndex = 1000; menuContainer.addChild(menuBackground); var menuBackgroundPart = LK.getAsset('menu_background_part', { anchorX: 0.5, anchorY: 0.19, x: centerX() - 1030, y: centerY() - 2866 }); menuBackgroundPart.zIndex = menuBackground.zIndex + 1; menuBackground.addChild(menuBackgroundPart); 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); /**** Arka Plan, Yer, Sky vs. (moveWithCamera = true) ****/ 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; background.jumpStrength = 0.66; background.moveWithCamera = true; 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; bg2.moveWithCamera = true; game.addChild(bg2); var sky = LK.getAsset('sky', { anchorX: 0.5, anchorY: 0, x: centerX(), y: 0 }); sky.zIndex = 2; sky.moveWithCamera = true; game.addChild(sky); var groundAsset = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.4, x: centerX(), y: groundY + 25 }); groundAsset.zIndex = 4.1; groundAsset.moveWithCamera = true; game.addChild(groundAsset); var ground2Asset = LK.getAsset('ground2', { anchorX: 0.5, anchorY: 0.05, x: centerX(), y: groundY - 40 }); ground2Asset.zIndex = 0.5; ground2Asset.moveWithCamera = true; game.addChild(ground2Asset); /**** 3D Arka Plan Container’ları (moveWithCamera = true) ****/ 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; background3DContainer.jumpStrength = 2.15; background3DContainer.isInverted = false; background3DContainer.addChild(background3D); background3DContainer.x = centerX(); background3DContainer.y = 2350; background3DContainer.moveWithCamera = true; 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; bgEffect3DContainer.jumpStrength = 2.15; bgEffect3DContainer.isInverted = false; bgEffect3DContainer.addChild(bgEffect3D); bgEffect3DContainer.x = background3DContainer.x + 2807; bgEffect3DContainer.y = 2350; bgEffect3DContainer.moveWithCamera = true; 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); /**** Underscore Asset (Cheat: 5 kez dokununca karakter ölmeyecek) ****/ var underscoreAsset = LK.getAsset('_', { anchorX: 0.5, anchorY: 0.5, x: centerX() + 1000, y: centerY() - 1500 // 500 piksel yukarı kaydırıldı }); underscoreAsset.zIndex = 15000; underscoreAsset.moveWithCamera = false; // UI benzeri davranması için sabit kalsın 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); }); // Karakteri oluştur ve ekle var character = game.addChild(new Character()); character.x = centerX(); character.y = centerY(); /**** Menü Konum Ayarı ****/ 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]); } } var musicSequence = ['m_1', 'M_2', 'M_3']; var musicCycle = 0; LK.playMusic(musicSequence[0]); 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); 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; 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 -= 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); }); }; /**** Flip/Unflip Functions ****/ 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
@@ -137,10 +137,15 @@
self.spawned = false;
self.prevX = self.x;
// Bu nesne de dünya hareketine dahil olsun:
self.moveWithCamera = true;
+ self.velocityY = 0;
+ self.gravity = 0.3;
+ self.jumpStrength = -12.1;
self.update = function () {
if (gameStarted && !gameOver) {
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
self.x += self.velocityX;
if (!self.spawned && self.prevX > treeSpawnThreshold && self.x <= treeSpawnThreshold) {
self.spawned = true;
var newTube = new Tube();
@@ -187,10 +192,15 @@
self.velocityX = -3.6;
self.spawned = false;
self.prevX = self.x;
self.moveWithCamera = true;
+ self.velocityY = 0;
+ self.gravity = 0.3;
+ self.jumpStrength = -12.1;
self.update = function () {
if (gameStarted && !gameOver) {
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
self.x += self.velocityX;
if (self.velocityX === 0) {
background.velocityX = 0;
bg2.velocityX = 0;