User prompt
close button olduğu lokasyonda kalsın ancak x texti 10 pixel yukarı ve 10 pixel sola gitsin
User prompt
20 pixel yukarı taşı close buttonu
User prompt
close button genişliği 1 yerine 0.8 uzunluğu 1 yerine 1.2 olsun
User prompt
en boy oranını değiştir uzunluğunu 1 yap genişliği 0.8 olsun
User prompt
50 pixel yukarı taşı close buttonu
User prompt
100 pixel aşağı indir close buttonu
User prompt
close buttonu boyu 1 ise 0.8 olsun
User prompt
close buttonu iki kat büyült
User prompt
Aşağıdaki adımları izleyerek “X” metnini sarı butonun tam ortasına getirip font boyutunu büyütebilirsiniz: createCloseButton fonksiyonunda, “X” metnini eklediğiniz closeLabel için konum (x ve y) ve font boyutu (fontSize) değerlerini güncelleyin. Örneğin, metni butonun tam ortasında göstermek istiyorsanız closeLabel.x = 0; ve closeLabel.y = 0; yapın. Font boyutunu “eğer 5 ise 10 yap” ifadesini, mevcut kodunuzdaki 55 değerini yaklaşık iki katına çıkararak (örneğin 110) uygulayabilirsiniz. İsteğinize göre değerleri arttırabilirsiniz. Güncellenmiş kod şu şekilde olabilir: js Kopyala Düzenle function createCloseButton() { // Close button’un kendi container’ı var closeButtonContainer = new Container(); closeButtonContainer.zIndex = 9999; // En üstte // Close butonu için görsel (sarı buton) var closeShape = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: 100, // Gerekirse arttırın height: 100 // Gerekirse arttırın }); closeButtonContainer.addChild(closeShape); // “X” metni var closeLabel = new Text2("X", { fontFamily: "Arial", fontSize: 110, // 55 yerine iki katına çıkarıldı (isteğe göre değiştirebilirsiniz) fill: 0xffffff, align: "center" }); // Metni tam ortada göstermek için (0,0) veriyoruz closeLabel.anchorX = 0.5; closeLabel.anchorY = 0.5; closeLabel.x = 0; closeLabel.y = 0; // Metni ekliyoruz closeButtonContainer.addChild(closeLabel); return closeButtonContainer; } closeLabel.x = 0; ve closeLabel.y = 0; değerleriyle “X” tam butonun ortasına yerleşir. fontSize: 110 (eski 55 değerini iki katına çıkardık) ile metin büyümüş olur. Sarı butonun boyutu, büyüyen metne göre yeterli değilse width ve height değerlerini (örneğin 120 veya 150 gibi) artırabilirsiniz. Bu şekilde, “X” yazısı sarı butonun üstünde ortalanır ve font boyutu büyür.
User prompt
close buttonu 5 pixel sola taşı
User prompt
close buttonu 15 pixel sola taşı
User prompt
close buttonu 15 pixel sola taşı
User prompt
close buttonu 10 pixel sola taşı
User prompt
close buttonu 10 pixel sola taşı
User prompt
close buttonu 15 pixel sola taşı
User prompt
close buttonu 15 pixel aşağı 15 pixel sola taşı
User prompt
close buttonu 60 pixel yukarı 30 pixel sağa taşı
User prompt
close buttonu 90 pixel aşağı 120 pixel sola taşı
User prompt
close buttonu ve close texti 90 pixel aşağı taşı
User prompt
Aşağıdaki örnek, close button’un tamamen bağımsız (kendi Container’ında) olduğu ve “second_menu” arka planından/tüm içerikten ayrı tutulduğu bir düzeni gösterir. İstediğiniz “her şey kendi dünyasında olsun” yaklaşımını bu şekilde sağlayabilirsiniz. 1) createCloseButton Fonksiyonu Öncelikle, tek bir fonksiyonla bağımsız bir close button oluşturuyoruz. İçinde bir şekil (ellipse) ve bir “X” metni var. İkisini aynı container’a ekliyoruz; ama bu container başka hiçbir şeyin child’ı değil. javascript Kopyala Düzenle 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) var closeShape = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: 100, // İstediğiniz boyuta göre ayarlayın height: 100 }); closeButtonContainer.addChild(closeShape); // “X” metni var closeLabel = new Text2("X", { fontFamily: "Arial", fontSize: 55, fill: 0xffffff, align: "center" }); closeLabel.anchorX = 0.5; closeLabel.anchorY = 0.5; // Metni tam ortada göstermek için (0,0)'a yerleştiriyoruz closeLabel.x = 0; closeLabel.y = 0; closeButtonContainer.addChild(closeLabel); return closeButtonContainer; } Bu fonksiyon bize, tamamen bağımsız bir close button container’ı döndürüyor. İstediğimiz ekrana ekleyip pozisyonlayabiliriz. 2) showCredits Örneği Şimdi, showCredits fonksiyonunda “second_menu” arka planını ve metinleri bir creditsContainer içinde topluyoruz. Close button’u da ayrı bir container olarak ekleyip istediğimiz yere konumlandırıyoruz. javascript Kopyala Düzenle function showCredits() { // 1) Modal Container var creditsContainer = new Container(); creditsContainer.zIndex = 300; // 2) Arka plan boyutları var modalWidth = 1250; var modalHeight = 2000; // 3) Arka plan var bg = LK.getAsset('second_menu', { anchorX: 0.5, anchorY: 0.5, width: modalWidth, height: modalHeight, color: 0x000000 }); // Ekranın ortasına koyuyoruz bg.x = centerX(); bg.y = centerY(); creditsContainer.addChild(bg); // 4) Metin var creditsText = new Text2("Game by\nMustafa Talha ŞEN", { fontFamily: "Arial", fontSize: 5000, fill: 0xffffff, align: "center" }); creditsText.anchorX = 0.5; creditsText.anchorY = 0.5; creditsText.x = bg.x; // arka planın ortasıyla aynı x creditsText.y = bg.y - 100; // biraz yukarıda 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 - 30; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 30; // Tıklanınca hem creditsContainer’ı hem close butonunu kaldır closeButton.on('down', function () { game.removeChild(creditsContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); // Close butonunu da oyuna ekle game.addChild(closeButton); } Neler oldu? creditsContainer sadece second_menu arka planını ve “Game by...” metnini tutuyor. Close butonu, creditsContainer’a child olarak eklenmedi. Onun yerine, createCloseButton() ile oluşturduğumuz ayrı bir container’ı game’e ekledik. Close butonuna basılınca ikisini de (creditsContainer ve closeButton) game’den siliyoruz. 3) showVolume ve showRecords İçin de Aynı Mantık showVolume ve showRecords fonksiyonlarında da benzer şekilde iki farklı container kullanabilirsiniz: volumeContainer / recordsContainer: Arka plan ve yazıların olduğu container closeButton (ayrı container): createCloseButton() ile oluşturulup oyuna eklenir. Örnek: javascript Kopyala Düzenle function showVolume() { var volumeContainer = new Container(); volumeContainer.zIndex = 300; var modalWidth = 1250, modalHeight = 2000; // Arka plan 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); // Metin var volumeText = new Text2("Volume Settings", { fontFamily: "Arial", fontSize: 5000, fill: 0xffffff }); volumeText.anchorX = 0.5; volumeText.anchorY = 0.5; volumeText.x = bg.x; volumeText.y = bg.y - 100; volumeText.scale.set(3, 3); volumeContainer.addChild(volumeText); // Container’ı oyuna ekle game.addChild(volumeContainer); // Close butonu bağımsız var closeButton = createCloseButton(); closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 30; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 30; closeButton.on('down', function () { game.removeChild(volumeContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); game.addChild(closeButton); } Aynısını showRecords için de uygulayabilirsiniz. Sonuç Bu yaklaşımda: Arka plan ve içerik (metin vb.) tek bir container’da (ör. creditsContainer, volumeContainer, recordsContainer). Close butonu bambaşka bir container olarak createCloseButton() ile oluşturulup game’e ekleniyor. Yani “kendi dünyası” var. Tıklanınca ikisini de (container + closeButton) aynı anda game.removeChild(...) ile kapatıyorsunuz. Böylece close butonu, “second_menu” ya da metinler ile hiyerarşik olarak bağlı olmadan, tamamen bağımsız şekilde çalışır.
User prompt
Adjust close button position in showCredits to be 30px left and 120px down Adjust close button position in showVolume to be 30px left and 120px down Adjust close button position in showRecords to be 30px left and 120px down
User prompt
Adjust close button position in showCredits to be 120px left and 90px down Adjust close button position in showVolume to be 120px left and 90px down Adjust close button position in showRecords to be 120px left and 90px down
User prompt
Adjust close button position in showCredits to be 60px left and 120px down Adjust close button position in showVolume to be 60px left and 120px down Adjust close button position in showRecords to be 60px left and 120px down
User prompt
Adjust close button position in showCredits to be 90px left and 60px down Adjust close button position in showVolume to be 90px left and 60px down Adjust close button position in showRecords to be 90px left and 60px down
User prompt
Adjust close button position in showCredits to be 30px left and 90px down Adjust close button position in showVolume to be 30px left and 90px down Adjust close button position in showRecords to be 30px left and 90px down
/**** * 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; 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) { 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) { gameOver = true; endGame(); } } } }); } }; self.jump = function () { if (!gameOver) { self.velocityY = self.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; // 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(); } } }; 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; // 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(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Karaktere 0.2 saniyelik (200ms) zoom in-out efekti uygulayan fonksiyon 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) var closeShape = LK.getAsset('button_close', { anchorX: 0.5, anchorY: 0.5, width: 160, // İstediğiniz boyuta göre ayarlayın height: 160 }); closeButtonContainer.addChild(closeShape); // “X” metni var closeLabel = new Text2("X", { fontFamily: "Arial", fontSize: 110, // Increased font size fill: 0xffffff, align: "center" }); closeLabel.anchorX = 0.5; closeLabel.anchorY = 0.5; // Metni tam ortada göstermek için (0,0)'a yerleştiriyoruz closeLabel.x = 0; closeLabel.y = 0; 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; 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; } flipped = false; 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; 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) { if (!flipped) { flipWorld(); } else { unflipWorld(); } } } /**** * Global Variables & Helper Functions ****/ var groundY = 2732; var menuOpen = true; var volumeOn = true; var records = []; // En iyi 5 skoru saklar 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 screenRight = 2048; var totalUnits = 10; var tubeSpawnThreshold, treeSpawnThreshold; var lastSpawner = null; var gameOverText = null; var passCounter = 0; var lastScore = 0; // Global lastScore variable // Flip durumunu takip eden bayrak 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ı var menuBackground = LK.getAsset('menu_background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: centerY() }); menuBackground.zIndex = 200; menuContainer.addChild(menuBackground); var menuBackgroundPart = LK.getAsset('menu_background_part', { anchorX: 0.5, anchorY: 0.19, x: centerX(), y: centerY() }); menuBackgroundPart.zIndex = menuBackground.zIndex + 1; // 201 menuContainer.addChild(menuBackgroundPart); // Butonlar ve Label’lar // PLAY 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, 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); // VOLUME var volumeButton = LK.getAsset('button_volume', { anchorX: 0.5, anchorY: 0.5, x: centerX() - 28, y: centerY() + 310 }); volumeButton.visible = false; menuContainer.addChild(volumeButton); var volumeLabel = new Text2("VOLUME", { fontFamily: "Arial", fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05, 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); // CREDITS 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, 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); // RECORDS 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, 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); // Ekranda sayacımız var counterText = new Text2('0', { size: 124.2, fill: 0xFFFFFF }); counterText.anchor.set(0, 0); counterText.x = 1320; counterText.y = 10; LK.gui.topLeft.addChild(counterText); // Arkaplanlar var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: centerX(), y: groundY / 2 }); background.zIndex = 0; game.addChild(background); 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.5, x: centerX(), y: groundY - -25 }); groundAsset.zIndex = 4.1; game.addChild(groundAsset); var ground2Asset = LK.getAsset('ground2', { anchorX: 0.5, anchorY: 0.5, x: centerX(), 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 ****/ function createCommonCloseElements(modalWidth, modalHeight) { var closeLabel = new Text2("X", { fontFamily: "Arial", fontSize: 75, // Adjusted to a reasonable value fill: 0xffffff, align: "center" }); closeLabel.anchorX = 0.5; closeLabel.anchorY = 0.5; closeLabel.zIndex = 10000; closeLabel.x = 0; // Position relative to closeButton closeLabel.y = 0; // Position relative to closeButton 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; // Center the button horizontally closeButton.y = 0; // Center the button vertically closeButton.addChild(closeLabel); return { closeLabel: closeLabel, closeButton: closeButton }; } function showCredits() { 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, 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); // 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 - 205; closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 165; // Tıklanınca hem creditsContainer’ı hem close butonunu kaldır closeButton.on('down', function () { game.removeChild(creditsContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); // Close butonunu da oyuna ekle game.addChild(closeButton); } function showVolume() { 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, fill: 0xffffff }); volumeText.scale.set(3, 3); volumeText.anchorX = 0.5; volumeText.anchorY = 0.5; volumeText.x = centerX() - 275; volumeText.y = centerY() - 800 + 40; volumeContainer.addChild(volumeText); // Container’ı oyuna ekle game.addChild(volumeContainer); // 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 + 165; closeButton.on('down', function () { game.removeChild(volumeContainer); game.removeChild(closeButton); menuOpen = true; menuContainer.visible = true; }); game.addChild(closeButton); } function showRecords() { 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, 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); // 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 + 165; 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; } // Flip'i eski hâline döndür 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; gameStarted = false; gameOver = false; lastSpawner = null; passCounter = 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) { 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(); } }); game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); };
===================================================================
--- original.js
+++ change.js
@@ -205,11 +205,11 @@
// Close butonu için ellipse (shape)
var closeShape = LK.getAsset('button_close', {
anchorX: 0.5,
anchorY: 0.5,
- width: 200,
+ width: 160,
// İstediğiniz boyuta göre ayarlayın
- height: 200
+ height: 160
});
closeButtonContainer.addChild(closeShape);
// “X” metni
var closeLabel = new Text2("X", {