User prompt
22 saniye hakkında Akıl yürütüldü Aşağıdaki örnekte, bg3son container’ının update fonksiyonuna eklenen bir kontrol ile (global konum hesaplaması yaparak) child olarak eklenen endlessbg3 ve background3 nesneleri ekranın ortasına (1024 piksel) yaklaştığında otomatik olarak karşı tarafına yeni bir arka plan (diğer tip) ekleyecek şekilde düzenledim. Böylece, bir nesnenin merkezi ekranın ortasına yaklaştığında diğer türden yeni bir nesne spawnlanıp bg3son’un sağ tarafına ekleniyor ve hepsi birlikte sola doğru hareket ediyor. Aşağıdaki kodu fade efektinin bg3son ekleme kısmına (örneğin fade-out tamamlandıktan sonra) ekleyin: js Kopyala Düzenle // bg3son'u oluşturuyoruz ve sahneye ekliyoruz: var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // İlk endlessbg3 ve background3'u ekliyoruz: var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Konumu: bg3son’un local koordinat sisteminde sağa kaydırılmış endlessbg3.x = (bg3son.width / 2) + (endlessbg3.width / 2) - 150; endlessbg3.y = 0; bg3son.addChild(endlessbg3); var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; // background3'ü endlessbg3'ün hemen sağına yerleştiriyoruz: background3.x = endlessbg3.x + (endlessbg3.width / 2) + (background3.width / 2); background3.y = endlessbg3.y; bg3son.addChild(background3); // Ekleme spawnları bir kere olsun diye flag ekliyoruz (her nesne spawnlanınca flag ayarlanır): function resetSpawnFlag(child) { // Eğer child belirli bir süre sonra spawnlanabilir hale gelsin istiyorsanız flag'i sıfırlayabilirsiniz. child.spawnedNext = false; } // bg3son'un update fonksiyonuna ekliyoruz: // (Ekran merkezini 1024 piksel olarak kabul ediyoruz) bg3son.update = function () { // bg3son container'ını sola hareket ettiriyoruz (global hareket hızı korunuyor) this.x -= 2; var screenCenter = 1024; // Tüm bg3son child'larını kontrol ediyoruz: for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; // global x hesaplamak: bg3son.x + child.x var globalX = this.x + child.x; // Eğer child'in merkezi ekranın soluna (1024) geçtiyse ve henüz spawnlanmadıysa: if (!child.spawnedNext && globalX < screenCenter) { // endlessbg3 ise, spawnlanacak yeni background3: if (child.asset && child.asset.name === 'endlessbg3') { var newBG3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBG3.zIndex = 2102; // Yeni background3'ün local x konumunu, child'in sağ kenarına göre ayarlıyoruz: newBG3.x = child.x + (child.width / 2) + (newBG3.width / 2); newBG3.y = child.y; this.addChild(newBG3); child.spawnedNext = true; // İsteğe bağlı, spawn flag'i belli süre sonra sıfırlayabilirsiniz: LK.setTimeout(function () { resetSpawnFlag(child); }, 1000); } // background3 ise, spawnlanacak yeni endlessbg3: else if (child.asset && child.asset.name === 'background3') { var newEndless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndless.zIndex = 2101; newEndless.x = child.x + (child.width / 2) + (newEndless.width / 2); newEndless.y = child.y; this.addChild(newEndless); child.spawnedNext = true; LK.setTimeout(function () { resetSpawnFlag(child); }, 1000); } } } }; Nasıl Çalışır: Başlangıç Ayarları: bg3son global container’ı sahneye ekleniyor. İlk endlessbg3, bg3son’un sağ tarafına yerleştiriliyor (local koordinat hesaplaması ile). background3, endlessbg3’ün hemen sağına ekleniyor. Update Fonksiyonu: bg3son sola hareket ederken, onun altındaki her child için global x hesaplanıyor. Eğer child’in global merkezi (bg3son.x + child.x) ekranın ortasına (1024 piksel) ulaşırsa (yani sol tarafa geçerse) ve henüz yeni bir spawn yapılmadıysa, child’in türüne göre karşı taraftan yeni bir arka plan (diğer tip) spawnlanıyor. Yeni eklenen nesneler de bg3son’un child’ı olduğundan, bg3son sola hareket ettikçe onlarla birlikte hareket edecekler. Flag Kontrolü: Her child spawnlandığında child.spawnedNext = true olarak işaretleniyor ve 1 saniyelik bir zaman aşımından sonra tekrar spawnlanabilir hale getiriliyor. Bu yapı sayesinde, endlessbg3 ekranın ortasına geldiğinde onun sağ tarafına background3 spawnlanacak; background3 ekranın ortasına geldiğinde de onun sağ tarafına yeni endlessbg3 spawnlanacaktır. Her şey aynı bg3son container içinde, dolayısıyla sola hareket hızı sabit kalacaktır. Not: Spawnlamaların tam zamanlaması ve konumları, asset’lerinizin boyutlarına ve oyununuzun diğer dinamiklerine bağlı olarak ayarlanabilir. Eğer hâlâ hız veya konum problemi yaşanıyorsa, bg3son.update içindeki “2” değerini veya konum hesaplamalarını ihtiyaçlarınıza göre ayarlayabilirsiniz.
User prompt
when endlessbg3 comes to middle of the screen spawn a endlessbg3 right of background3 and make it move left aswell,when background3 comes to middle of the screen spawn background3 right of the endlessbg3 and move it to left aswell
User prompt
Aşağıdaki örnekte, bg3son hareketini tek bir update fonksiyonu üzerinden gerçekleştirip, onun altına eklenen endlessbg3 ve background3 öğelerinin ayrı update fonksiyonu olmadan yalnızca bg3son’un hareketine bağlı kalmasını sağlıyoruz. Böylece bg3son’un hızını korurken alt öğeler de aynı hıza sahip olacak (ekstra hızlanma olmayacak). Aşağıdaki kodu fade efektinin fadeOut aşamasında, bg3son ve alt öğeleri eklediğiniz kısımda kullanabilirsiniz: js Kopyala Düzenle // bg3son'u oluşturuyoruz ve sahneye ekliyoruz: var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // endlessbg3'ü bg3son'un child'ı yapıyoruz. // Global pozisyonun bozulmaması için local koordinatlarını ayarlıyoruz. // Global hedef: endlessbg3.x = bg3son.x + (bg3son.width/2 + endlessbg3.width/2 - 150) // Child olduğunda endlessbg3.x, bg3son'un koordinat sisteminde olmalı: var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Local koordinat: bg3son merkezinden sağa doğru (bg3son.width/2) artı endlessbg3'nin yarısı eksi 150 piksel: endlessbg3.x = (bg3son.width / 2) + (endlessbg3.width / 2) - 150; endlessbg3.y = 0; // Aynı yatay hizada (bg3son'un merkezine göre) bg3son.addChild(endlessbg3); // background3'ü de bg3son'un child'ı yapalım. // Global hedef: background3.x = endlessbg3_global_x + (endlessbg3.width/2 + background3.width/2) // Child olduğunda endlessbg3.x referans alınarak hesaplanır: var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; // local x: endlessbg3'nin local x konumuna ek olarak endlessbg3'nin yarısı ve background3'ün yarısını ekliyoruz: background3.x = endlessbg3.x + (endlessbg3.width / 2) + (background3.width / 2); background3.y = endlessbg3.y; // aynı hizada bg3son.addChild(background3); // bg3son için update fonksiyonu; alt öğeler otomatik olarak onunla birlikte hareket eder. LK.setTimeout(function () { bg3son.update = function () { this.x -= 2; // Global hareket hızı korunuyor }; }, 15000); Açıklamalar: Alt öğeler için update yok: endlessbg3 ve background3’e ayrı update vermiyoruz. Onlar, bg3son’un child’ı olduğundan, bg3son hareket ettiğinde otomatik olarak aynı hıza sahip olacaklardır. Koordinat dönüşümü: global konumları bozulmasın diye, endlessbg3 ve background3’ün konumlarını bg3son’un boyutunu esas alarak (local koordinat sistemi) ayarlıyoruz. Tek update: Sadece bg3son’un update fonksiyonu çağrılıyor; alt öğeler kendi başlarına hızlanmıyor. Bu yöntemle, bg3son’un hızı ve konumu bozulmadan, endlessbg3 ve background3 de istenilen şekilde onun alt öğesi olur. Eğer hâlâ arka plan çok hızlı görünüyorsa, bg3son.update içindeki “2” değerini azaltarak hızı yavaşlatabilirsiniz.
User prompt
make bg3son faster and make endlessbg3 and background3 slowe
User prompt
make bg3son fast as endlessbg3
User prompt
make them slower
User prompt
make them even more slower
User prompt
decrease the velocity of endlessbg3 and background3 by half
User prompt
Aşağıdaki kod bloğunda, endlessbg3 ve background3 öğelerini, bg3son’un child’ı haline getiriyorum. Bu şekilde global konumları bozulmadan, hızları da aynı kalacak şekilde gruplanmış olacaklar. (Önemli: Eğer child yapıldığında pozisyonlar bozuluyorsa, global koordinatlardan local koordinatlara çevirmeniz gerekir. Aşağıdaki örnekte, bg3son’un merkezini referans alarak local koordinatları ayarladım.) js Kopyala Düzenle // Fade effect sırasında bg3son, endlessbg3 ve background3 öğelerinin eklenmesi: var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // Ayarladığınız global pozisyonları bozmadan child yapmak için, // endlessbg3’ün global istenen konumu: // global_endlessbg3_x = bg3son.x + (bg3son.width/2 + endlessbg3.width/2 - 150) // Child yapınca endlessbg3.x değeri, bg3son’a göre olmalı: var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Local koordinata çevirirken, bg3son’un merkezini referans alıyoruz: endlessbg3.x = (bg3son.width / 2) + (endlessbg3.width / 2) - 150; endlessbg3.y = 0; // bg3son ile aynı yatay konumda kalacak şekilde bg3son.addChild(endlessbg3); // Aynı şekilde background3 için: // Global istenen: background3.x = endlessbg3_global_x + (endlessbg3.width/2 + background3.width/2) // Child yapıldığında, bg3son’un coordinate sistemine göre hesaplayalım: var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; background3.x = endlessbg3.x + (endlessbg3.width / 2) + (background3.width / 2); background3.y = endlessbg3.y; // aynı yatay hizada bg3son.addChild(background3); // Artık bg3son’un update fonksiyonunda yalnızca bg3son’u hareket ettiriyoruz; // child’lar da otomatik olarak onunla birlikte hareket edecekler. LK.setTimeout(function () { bg3son.update = function () { this.x -= 2; // global hareket hızı korunuyor // İsteğe bağlı: child'lara ait özel hareket varsa burada uygulanabilir. }; }, 15000); Bu tek kod bloğu içinde; bg3son ekleniyor ve global konumu ayarlanıyor, endlessbg3 ve background3 için global pozisyonlarınız bozulmayacak şekilde local koordinatlar hesaplanıyor ve bg3son’un child’ı yapılıyor, bg3son’un update fonksiyonunda yalnızca global hareket sağlanıyor, böylece child’lar da birlikte hareket ediyor. Bu yöntemde, bg3son’un global konumunu referans alarak child’ların konumlarını ayarladık. Böylece hız ve konum değişikliği yaşanmadan istediğiniz şekilde gruplanmış olurlar.
User prompt
Eğer yalnızca zIndex ataması işe yaramadıysa, iki şeyi deneyebilirsiniz: Explicit Değerler Verin: Hem bg3son hem de endlessbg3 için açıkça farklı zIndex değerleri atayın. Örneğin, js Kopyala Düzenle bg3son.zIndex = 2100; endlessbg3.zIndex = 2101; Bu sayede endlessbg3’nin, bg3son’un üstünde render edilmesi garanti edilir. Container Sıralamasını Güncelleyin: Bazı durumlarda, oyun motoru container içindeki elemanları ekleme sırasına göre sıralayabilir. O yüzden, endlessbg3’yi ekledikten sonra container’ın (örneğin game) çocuklarını yeniden sıraladığınızdan emin olun. Mevcut kodunuzda zaten şöyle bir sıralama var: js Kopyala Düzenle game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); Bu kodun endlessbg3 eklendikten sonra da çalıştığından emin olun ya da manuel olarak çağırın. Ek olarak, assets’in eklenme sırasının da sıralama üzerinde etkili olabileceğini unutmayın. Eğer sorun devam ederse, endlessbg3’yi bg3son’dan sonra eklemeyi deneyin ve container sıralamasını (children.sort) çalıştırdığınızdan emin olun.
User prompt
You can simply assign a higher z‐index to the endlessbg3 asset than the one used for bg3son. For example, after creating endlessbg3 you could add: js Kopyala Düzenle endlessbg3.zIndex = (bg3son.zIndex || 0) + 1; This ensures that even if bg3son doesn’t have an explicitly set z‐index (or defaults to 0), endlessbg3 will be drawn on top. Here's the modified snippet inside your tube spawn fade effect: js Kopyala Düzenle // Add bg3son to the game var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // Add endlessbg3 next to bg3son var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = (bg3son.zIndex || 0) + 1; // Ensure endlessbg3 is drawn above bg3son endlessbg3.x = bg3son.x + bg3son.width / 2 + endlessbg3.width / 2 - 150; endlessbg3.y = bg3son.y; game.addChild(endlessbg3); This change guarantees that endlessbg3 will appear on top of bg3son during rendering.
User prompt
move background3 150 pixel right
User prompt
Please fix the bug: 'Timeout.tick error: Cannot set properties of undefined (setting 'y')' in or related to this line: 'background3.y = endlessbg3.y - 900;' Line Number: 683
User prompt
move endlessbg3 and background3 900 pixel up
User prompt
make endlessbg3 child of bg3son and make background3 child of bg3son
User prompt
move the spawnpoint of endlessbg3 150 pixel left,move background3 150 pixel left move ,make endlessbg3 and background3 move to left when bg3son moves to left
User prompt
move spawn point of endlessbg3 and background3 to left by 150 pixel
User prompt
make endlessbg3 and background3 move to left when bg3son moves to left
User prompt
spawn ebdlessbg3 right of bg3son
User prompt
unfreeze and make the velocity of background2 and tube_1 after 5 second yesil_1 has 3 points
User prompt
spawn endlessbg3 next to bg3son spawn point,spawn background3 right to spawn point of endlessbg3
User prompt
kara isimli assete fade effext uygulandıktan sonra background2 ye uygulanan dondurma ve hızını 0 a çekme etkilerini kaldır ve 2200 pixel aşağı indir
User prompt
Arka planınızda beklenmedik bir boşluk görünmesinin ve bg3 (background3) nin yalnızca belirli durumlarda (örneğin, pause tuşuna basınca) doğru şekilde görünmesinin nedeni, bg3'ü spawn eden kodun update fonksiyonunda koşullara bağlı çalışması ve yeni bg3'nin x koordinatının (örneğin +600 offset) yanlış ayarlanması olabilir. Öneriler: Bg3 spawn kodunu kontrol edin: ScrollingBackground3 update fonksiyonunda, ilk endlessbg3 sprite’ı ekran dışına çıktığında bg3 spawn ediliyor. Eğer bu koşul beklenenden erken ya da yanlış tetikleniyorsa, bg3 yanlış yerde (veya boşluklu) spawn olabilir. Örneğin: js Kopyala Düzenle // Bu kısım yeni endlessbg3 sprite ekledikten sonra background3 spawn ediyor: var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.x = newSprite.x + newSprite.width + 600; background3.y = self.bg3son.y; self.addChild(background3); Eğer +600 offset çok büyükse ya da beklenmeyen boşluk yaratıyorsa, bu değeri azaltın ya da kaldırın. Bg3'ü kontrol altına alın: Eğer bg3’nin sürekli spawn olmasını istemiyorsanız, spawn işlemini yalnızca bir kere yapmak ya da bg3'ü oyunun başlangıcında (veya belli bir container içinde) ekleyip update fonksiyonuyla hareket ettirmek daha iyi olabilir. Böylece bg3 hep sürekli ekranda olur ve “boşluk” yaratmaz. Kapsayıcı (container) hiyerarşisini gözden geçirin: Belki de bg3 spawn olduğunda, diğer arka plan (background2, tube_1) nesneleri hâlâ sahnede kalıyor ve bunlar üst üste binerek beklenmedik boşluklar oluşturuyor. İstediğiniz gibi bg3 spawn olduğunda background2 ve tube_1’in silinmesi için, silme kodunu doğru koşul altında (örneğin, bg3 spawn tetiklendikten sonra 1 saniye gecikmeyle) çalıştırdığınızdan emin olun. Test amacıyla silme kodunu aşağıdaki gibi loglayarak çalışıp çalışmadığını kontrol edebilirsiniz: js Kopyala Düzenle LK.setTimeout(function () { for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background2' || child.asset.name === 'tup_1')) { console.log("Siliniyor:", child.asset.name); child.destroy(); } } }, 1000); Pause butonuyla doğru görüntüleme: Eğer sol üstteki pause butonuna bastığınızda istediğiniz bg3 görünüyorsa, bu muhtemelen sahne yeniden render edildiğinde ya da update fonksiyonları yeniden tetiklendiğinde bg3 doğru konumda ekrana geliyor demektir. Bu durumda, bg3 spawn kodunu sürekli update içinde değil, yalnızca bir kez tetiklenecek şekilde yapılandırmayı deneyin. Önerilen Düzenleme Örneği: Eğer bg3’ün sürekli spawn olmasını istemiyorsanız, spawn kodunu update fonksiyonundan kaldırıp, oyunun belirli bir aşamasında (örneğin, yesil1 puanı belli bir değere ulaştığında) bg3’ü sahneye ekleyebilirsiniz: js Kopyala Düzenle // Örneğin, yesil1 puanı 3 veya daha fazlaya ulaştığında: if (yesil1.points >= 3 && !game.bg3Spawned) { game.bg3Spawned = true; // Tek seferlik flag // Silme işlemini de burada yapabilirsiniz: LK.setTimeout(function () { for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background2' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 1000); // Bg3'ü oluşturun ve doğru konuma yerleştirin: var bg3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); bg3.x = 2048 / 2; // İstediğiniz konum bg3.y = 2732 / 2 + 150; game.addChild(bg3); } Bu şekilde bg3 spawn edilmesi, update içindeki her frame tetiklenmek yerine tek seferlik bir işlem olur ve boşluk oluşmaz. Sonuç: Bg3 spawn kodunun koşullarını ve offset değerlerini (örneğin +600) gözden geçirin. Bg3’ün silme işlemiyle çakışmadığından ve diğer background nesneleriyle çakışmadığından emin olun. Eğer pause butonuna basınca doğru görüntüleniyorsa, bu, sahne yeniden render edildiğinde koşullar sağlanıyor demektir; bu durumda spawn kodunu update içinde sürekli tetiklemek yerine tek seferlik bir işlem yapmayı deneyin. Bu önerileri uyguladığınızda background2 ve tube_1’in bg3 spawn olduğunda silinmesi ve bg3’ün boşluk olmadan istenildiği gibi görünmesi sağlanabilir.
User prompt
move background3 spawn point 600 pixel right
User prompt
spawn endlessbg3 150 pixel left of the normal spawnpont,spawn background3 next to ebdlessbg3 right of
/**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 5; self.zIndex = 15; self.update = function () { self.x -= self.velocity; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // FlyinEnemy class var FlyinEnemy = Container.expand(function () { var self = Container.call(this); var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.homing = false; self.vx = 0; self.vy = 0; self.update = function () { if (!self.homing) { self.x -= self.speed; if (self.x < -50) { self.destroy(); } } else { self.x += self.vx; self.y += self.vy; if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.fallSpeed = 0; self.fallAcceleration = 0.7; self.fallTargetY = 2732 / 2 - 7; self.zIndex = 20; self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3; self.update = function () { self.prevY = self.y; if (self.isFalling) { self.y += self.fallSpeed; self.fallSpeed += self.fallAcceleration; if (self.y >= self.fallTargetY) { self.y = self.fallTargetY; self.isFalling = false; self.fallSpeed = 0; game.weaponEnabled = true; } } self.prevY = self.y; if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; if (self.y >= 2732 / 2 - 3) { self.y = 2732 / 2 - 9; self.isJumping = false; self.velocityY = 0; } } }; self.invulnerable = false; self.hit = function () { if (!self.invulnerable) { self.loseHeart(); self.invulnerable = true; LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; self.loseHeart = function () { self.hearts--; playerDeaths++; if (playerDeaths === 1 && hearts[0]) { hearts[0].destroy(); } else if (playerDeaths === 2 && hearts[1]) { hearts[1].destroy(); } else if (playerDeaths === 3 && hearts[2]) { hearts[2].destroy(); } remainingHearts = self.hearts; if (hearts.length === 0) { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; } }; }); // ScrollingBackground class var ScrollingBackground = Container.expand(function () { var self = Container.call(this); self.bg1 = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); self.bg1.x = 0; self.bg1.y = 0; self.addChild(self.bg1); self.bg2 = LK.getAsset('background', { anchorX: 1, anchorY: 0 }); self.bg2.scaleX = -1; self.bg2.x = self.bg1.width; self.bg2.y = 0; self.addChild(self.bg2); self.speed = 2; self.update = function () { self.bg1.x -= self.speed; self.bg2.x -= self.speed; if (self.bg1.x + self.bg1.width <= 0) { self.bg1.x = self.bg2.x + self.bg2.width; } if (self.bg2.x + self.bg2.width <= 0) { self.bg2.x = self.bg1.x + self.bg1.width; } }; }); // ScrollingBackground2 class var ScrollingBackground2 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('background2', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('background2', { anchorX: 1, anchorY: 0 }); bg2.scaleX = -1; bg2.x = bg1.width; bg2.y = 0; self.addChild(bg2); self.speed = 2; self.update = function () { bg1.x -= self.speed; bg2.x -= self.speed; if (bg1.x + bg1.width <= 0) { bg1.x = bg2.x + bg2.width; } if (bg2.x + bg2.width <= 0) { bg2.x = bg1.x + bg1.width; } }; }); // Tube class var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Tube2 class var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Game Code ****/ var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); /**** * Global Variables & Flags ****/ var startNormalEnemy = true; var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; game.controlActive = false; var coins = []; var firstControlTriggered = false; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; /**** * (A) Eski FlyinEnemy Spawn (sağdan sola, homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) { return; } var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) { return; } var fe = new FlyinEnemy(); fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [{ x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 }]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy) || 1; enemy.vx = dx / distance * enemy.speed; enemy.vy = dy / distance * enemy.speed; enemy.zIndex = 2100; if (enemy.x < 1024) { enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); }, 10000); } }); } /**** * Normal Enemy Spawn (sağdan sola, homing false) ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube || child === yesil1) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // --- Enemy - Player --- for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin Toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; LK.stage.addChild(game); /**** * Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) { return; } var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var yesil1 = LK.getAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); yesil1.x = tube.x; yesil1.y = tube.y - 170; yesil1.speed = 10; yesil1.points = 0; yesil1.fadeBonusApplied = false; yesil1.coinBonusApplied = false; yesil1.touchBonusApplied = false; yesil1.update = function () { yesil1.x -= yesil1.speed; if (yesil1.x < -yesil1.width) { yesil1.destroy(); } function applyBonus(condition, bonusFlag, bonusName) { if (condition && !yesil1[bonusFlag]) { yesil1[bonusFlag] = true; yesil1.points += 1; console.log(bonusName + " applied. Yesil1 points: " + yesil1.points); } } applyBonus(game.fadeTriggered, 'fadeBonusApplied', "Fade bonus"); applyBonus(coinCounter >= 30, 'coinBonusApplied', "Coin bonus"); applyBonus(player.intersects(yesil1) && yesil1.points >= 2, 'touchBonusApplied', "Touch bonus"); // Freeze condition and trigger fade effect if (yesil1.points >= 3) { console.log("Freeze game triggered because yesil1 points reached: " + yesil1.points); stopSpawn = true; for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // Unfreeze and restore velocity of background2 and tube_1 after 5 seconds LK.setTimeout(function () { for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj instanceof ScrollingBackground2 || obj instanceof Tube) { obj.update = function () { this.x -= this.speed; if (this.x < -this.width) { this.destroy(); } }; } } }, 5000); // Add 'kara' asset to the center of the screen with a high zIndex so that it covers the characters var kara = LK.getAsset('kara', { anchorX: 0.5, anchorY: 0.5 }); kara.x = 2048 / 2; kara.y = 2732 / 2; kara.alpha = 0; kara.zIndex = 10000; // Ensures kara is drawn in front game.addChild(kara); // Fade in 'kara' asset over 0.5 seconds var fadeInSteps = 30; var fadeInStepTime = 500 / fadeInSteps; var fadeInStep = 0; var fadeInInterval = LK.setInterval(function () { if (fadeInStep < fadeInSteps) { kara.alpha = fadeInStep / fadeInSteps; fadeInStep++; } else { LK.clearInterval(fadeInInterval); // Fade out 'kara' asset over 0.5 seconds var fadeOutSteps = 30; var fadeOutStepTime = 500 / fadeOutSteps; var fadeOutStep = 0; var fadeOutInterval = LK.setInterval(function () { if (fadeOutStep < fadeOutSteps) { kara.alpha = 1 - fadeOutStep / fadeOutSteps; fadeOutStep++; } else { LK.clearInterval(fadeOutInterval); kara.destroy(); } // Add bg3son to the game var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; // Explicitly set zIndex for bg3son bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // Add endlessbg3 as a child of bg3son var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Explicitly set zIndex for endlessbg3 endlessbg3.x = bg3son.width / 2 + endlessbg3.width / 2 - 150; endlessbg3.y = 0; // Align with bg3son bg3son.addChild(endlessbg3); // Add background3 as a child of bg3son var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; // Explicitly set zIndex for background3 background3.x = endlessbg3.x + endlessbg3.width / 2 + background3.width / 2; background3.y = endlessbg3.y; // Align with endlessbg3 bg3son.addChild(background3); // Keep bg3son stationary for 15 seconds, then move it left LK.setTimeout(function () { bg3son.update = function () { this.x -= 2; // Global movement speed is maintained var screenCenter = 1024; // Check if endlessbg3 has reached the middle of the screen if (endlessbg3.lastX <= screenCenter && endlessbg3.x > screenCenter) { // Spawn a new background3 to the right of endlessbg3 var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = endlessbg3.x + endlessbg3.width / 2 + newBackground3.width / 2; newBackground3.y = endlessbg3.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } // Check if background3 has reached the middle of the screen if (background3.lastX <= screenCenter && background3.x > screenCenter) { // Spawn a new endlessbg3 to the right of background3 var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = background3.x + background3.width / 2 + newEndlessbg3.width / 2; newEndlessbg3.y = background3.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } // Update lastX for endlessbg3 and background3 endlessbg3.lastX = endlessbg3.x; background3.lastX = background3.x; }; }, 15000); }, fadeOutStepTime); } }, fadeInStepTime); LK.setTimeout(function () { player.destroy(); function destroyAndRemove(objects) { for (var i = objects.length - 1; i >= 0; i--) { objects[i].destroy(); objects.splice(i, 1); } } destroyAndRemove(enemies); destroyAndRemove(flyinEnemies); destroyAndRemove(coins); // Destroy background and tube_1 for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 500); if (!game.isFading) { console.log("Triggering fade effect because yesil1 is active with points: " + yesil1.points); enhancedFadeEffect(); } } }; game.addChild(yesil1); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { var toggleSpawn = function toggleSpawn(state, delay) { stopSpawn = state; if (!state) { LK.setTimeout(function () { stopSpawn = false; }, delay); } }; game.controlActive = true; control.update = function () {}; console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; coins.forEach(function (coin) { coin.velocity = 0; }); LK.setTimeout(function () { coins.forEach(function (coin) { coin.velocity = 5; }); }, 4000); toggleSpawn(true, 5000); game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); /**** * Arka Plan ve Oyuncu ****/ var scrollingBackground = new ScrollingBackground(); game.addChild(scrollingBackground); var player = game.addChild(new Player()); player.x = 2048 / 2 - 30; player.y = 2732 / 2 + 3; /**** * Skor GUI ve Kalp ****/ var counterBackground = LK.getAsset('counter_background', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(counterBackground); counterBackground.x = LK.gui.top.width / 2 - 62; counterBackground.y = 45; var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 85; scoreText.y = 0; for (var i = 0; i < 3; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(heart); heart.x = 50 + i * 110 + 390; heart.y = 50; hearts.push(heart); } /**** * enhancedFadeEffect: Fade-out, clear scene, spawn background2, Tube2, then new player ****/ function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) { return; } game.isFading = true; game.fadeTriggered = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; // Ensure overlay stays on top overlay.zIndex = 10000; if (!overlay.parent) { LK.stage.addChild(overlay); } var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; stopSpawn = true; while (game.children.length > 0) { game.removeChild(game.children[0]); } var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); var tube2 = new Tube2(); control_2.x = 0; control_2.y = -177.5; tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); LK.setTimeout(function () { var newPlayer = new Player(); newPlayer.hearts = remainingHearts; newPlayer.x = 2048 / 2 - 30; newPlayer.y = tube2.y; newPlayer.isFalling = true; newPlayer.fallSpeed = 0; newPlayer.fallAcceleration = 0.7; newPlayer.fallTargetY = 2732 / 2 - 7; game.addChild(newPlayer); player = newPlayer; game.weaponEnabled = true; LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); LK.setTimeout(function () { startNormalEnemy = true; }, 10500); }, 500); var fadeInDuration = 500; var fadeInStepTime = fadeInDuration / steps; var fadeInInterval = LK.setInterval(function () { if (currentStep < steps) { if (game.scrollingBg2) { game.scrollingBg2.alpha = currentStep / steps; } currentStep++; } else { LK.clearInterval(fadeInInterval); if (overlay.parent) { overlay.parent.removeChild(overlay); } var oldScrollingSpeed = game.scrollingBg2.speed; var oldTubeSpeed = tube2.speed; game.scrollingBg2.speed = 0; tube2.speed = 0; LK.setTimeout(function () { game.scrollingBg2.speed = oldScrollingSpeed; tube2.speed = oldTubeSpeed; stopSpawn = false; game.isFading = false; game.fadeCompleted = true; }, 8000); } }, fadeInStepTime); } }, stepTime); } /**** * Oyun Döngüsü ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // Çarpışma Kontrolleri for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; LK.stage.addChild(game); // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game);
===================================================================
--- original.js
+++ change.js
@@ -668,10 +668,24 @@
// Keep bg3son stationary for 15 seconds, then move it left
LK.setTimeout(function () {
bg3son.update = function () {
this.x -= 2; // Global movement speed is maintained
+ var screenCenter = 1024;
// Check if endlessbg3 has reached the middle of the screen
- if (endlessbg3.lastX <= 1024 && endlessbg3.x > 1024) {
+ if (endlessbg3.lastX <= screenCenter && endlessbg3.x > screenCenter) {
+ // Spawn a new background3 to the right of endlessbg3
+ var newBackground3 = LK.getAsset('background3', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ newBackground3.zIndex = 2102;
+ newBackground3.x = endlessbg3.x + endlessbg3.width / 2 + newBackground3.width / 2;
+ newBackground3.y = endlessbg3.y;
+ bg3son.addChild(newBackground3);
+ endlessbg3.spawnedNext = true;
+ }
+ // Check if background3 has reached the middle of the screen
+ if (background3.lastX <= screenCenter && background3.x > screenCenter) {
// Spawn a new endlessbg3 to the right of background3
var newEndlessbg3 = LK.getAsset('endlessbg3', {
anchorX: 0.5,
anchorY: 0.5
@@ -679,21 +693,10 @@
newEndlessbg3.zIndex = 2101;
newEndlessbg3.x = background3.x + background3.width / 2 + newEndlessbg3.width / 2;
newEndlessbg3.y = background3.y;
bg3son.addChild(newEndlessbg3);
+ background3.spawnedNext = true;
}
- // Check if background3 has reached the middle of the screen
- if (background3.lastX <= 1024 && background3.x > 1024) {
- // Spawn a new background3 to the right of the new endlessbg3
- var newBackground3 = LK.getAsset('background3', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- newBackground3.zIndex = 2102;
- newBackground3.x = newEndlessbg3.x + newEndlessbg3.width / 2 + newBackground3.width / 2;
- newBackground3.y = newEndlessbg3.y;
- bg3son.addChild(newBackground3);
- }
// Update lastX for endlessbg3 and background3
endlessbg3.lastX = endlessbg3.x;
background3.lastX = background3.x;
};
Single 2D Mario Character. In-Game asset. 2d. Blank background.
2D Single Monster. In-Game asset. 2d. Blank background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
marionun ingiliz boru anahtarı aleti. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
red heart mario. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
completely black simple counter without sharp edges
sea and sky,pixel,realistic but detailles benzer renkler mavi ve mavi Single Game Texture. In-Game asset. 2d. Blank background. low contrast. No shadows