User prompt
1. Wave Halindeki FlyinEnemy’lerden Coin Çıkmamasını Sağlamak a. Dalga halinde (wave) spawn edilen flyin enemy’lerin bir özelliğini ayarlayın. Örneğin, spawnWaveOfFlyinEnemies() fonksiyonunda her oluşturduğunuz enemy’ye: js Kopyala Düzenle enemy.wave = true; b. Çarpışma (Weapon ile) kontrolünde, eğer ilgili flyin enemy’nin wave özelliği true ise coin üretimini atlayın. Örneğin, flyin enemy için çarpışma kontrolü yapan kısımda: js Kopyala Düzenle if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { // Eğer enemy wave ise coin oluşturma if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; // 60 px aşağıda coin.velocity = 5; game.addChild(coin); coins.push(coin); } // Ortak particle efekt işlemleri: var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; // 30 px sola particleEffect.y = flyinEnemies[n].y + 30; // 30 px aşağıda game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } Bu sayede, wave olarak işaretlenmiş (yani level 2’de spawn edilen) flyin enemy’lerden coin üretilmeyecektir.
User prompt
Extend the pause duration for scrollingBg2 and tube2 to 8 seconds after player respawn
User prompt
decrease FlyinEnemy wave spawn interval to 0.8 seconds
User prompt
LK.setTimeout fonksiyonundaki 2000 milisaniyeyi 6000 milisaniye olarak değiştirmeniz yeterli. Yani: js Kopyala Düzenle // Eski hali (2 saniye) 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; game.isFading = false; game.fadeCompleted = true; }, 2000); // 2000 ms = 2 saniye Bunu şu hale getirin: js Kopyala Düzenle // Yeni hali (6 saniye) 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; game.isFading = false; game.fadeCompleted = true; }, 6000); // 6000 ms = 6 saniye Bu şekilde, background2 (ScrollingBackground2) ve Tube2, karakter ikinci kez spawn olduğunda 6 saniye boyunca hareketsiz kalacak ve sonra eski hızlarına geri dönecekler.
User prompt
1) FlyinEnemy Ters Dönme (Mirroring) Şu an spawnWaveOfFlyinEnemies() fonksiyonunda, “kuş” sol tarafta (x < 1024) spawn olursa enemy.flipX = true; yapıyorsunuz. Ancak flipX her zaman işe yaramayabilir. Bunun yerine konteynerin veya direkt görselin ölçek değerini -1 yaparak aynalama (mirror) etkisi sağlayabilirsiniz. Örneğin: js Kopyala Düzenle // Eğer sol tarafta spawn oluyorsa, aynala (mirror) if (enemy.x < 1024) { enemy.scaleX = -1; } Bunu, spawnWaveOfFlyinEnemies() fonksiyonundaki şu kısma ekleyin (kuşun oluşturulduğu satırlarda): js Kopyala Düzenle var enemy = new FlyinEnemy(); enemy.homing = true; enemy.x = point.x; enemy.y = point.y; // Oyuncuya doğru hareket için vx, vy hesaplaması // ... // *** Mirroring ekle *** if (enemy.x < 1024) { enemy.scaleX = -1; } // Sonra game.addChild(enemy), vb... İsterseniz flyinEnemyGraphics.scaleX = -1; da diyebilirsiniz, ancak en kolayı enemy.scaleX = -1; şeklinde konteyneri aynalamak. 2) FlyinEnemy Dalga Spawn Aralığını 1.2 Saniye Yapmak Şu an her kuşu index * 600 ms gecikmeyle spawn ediyorsunuz. Bunu 1200 ms yaparak 1.2 saniye aralığa çıkarabilirsiniz. Yani: js Kopyala Düzenle spawnPoints.forEach(function(point, index) { LK.setTimeout(function() { var enemy = new FlyinEnemy(); // ... }, index * 1200); // 1.2 sn }); Böylece her bir kuş, bir öncekinin spawn edilmesinden 1.2 saniye sonra gelecek. 3) Normal Enemy Öldüğünde Particle Efekt 15px Solda Olsun Normal enemy, Enemy - Weapon çarpışmasında şu şekilde particle oluşturuyorsunuz: js Kopyala Düzenle var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); Burada x koordinatını 15 piksel sola kaydırmak için: js Kopyala Düzenle particleEffect.x = enemies[j].x - 15; // 15 px sola particleEffect.y = enemies[j].y; Yani çarpışma anında (enemy yok olurken) şu hale getirin: js Kopyala Düzenle particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; 4) FlyinEnemy Öldüğünde Particle Efekt 30px Sola, 30px Aşağı Benzer şekilde, FlyinEnemy için FlyinEnemy - Weapon çarpışmasında particle efektini 30px sola ve 30px aşağıda oluşturmak istiyorsunuz. Kodunuzda şuna benzer bir kısım var: js Kopyala Düzenle var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x; particleEffect.y = flyinEnemies[n].y; Bunu şu şekilde değiştirin: js Kopyala Düzenle particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; Böylece soldan 30px, aşağıdan 30px kaydırarak efekti oluşturmuş olursunuz. Özetle Değişecek Satırlar Mirroring (8 yönden homing dalgada): js Kopyala Düzenle if (enemy.x < 1024) { enemy.scaleX = -1; } Dalga Spawn Aralığı (1.2 saniye): js Kopyala Düzenle }, index * 1200); Normal Enemy Particle: js Kopyala Düzenle particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; FlyinEnemy Particle: js Kopyala Düzenle particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; Bu dört düzenlemeyi kodunuzun ilgili yerlerine eklediğinizde, Kuşlar (flyinEnemies) sol taraftan spawn olduklarında ters dönecek, Dalga halinde spawn aralığı 1.2 saniye olacak, Normal düşman (Enemy) ölürken 15px solda particle efekt gözükecek, FlyinEnemy ölürken 30px solda, 30px aşağıda particle efekt oluşacaktır.
User prompt
1. Spawn Noktalarını Belirleme ve Karıştırma Öncelikle, ekranın köşeleri ve kenar ortaları gibi 8 adet sabit spawn noktasını tanımlayın. Örneğin: js Kopyala Düzenle var spawnPoints = [ { x: 0, y: 0 }, // Sol üst { x: 2048, y: 0 }, // Sağ üst { x: 0, y: 2732 }, // Sol alt { x: 2048, y: 2732 }, // Sağ alt { x: 1024, y: 0 }, // Üst orta { x: 1024, y: 2732 }, // Alt orta { x: 0, y: 1366 }, // Sol orta { x: 2048, y: 1366 } // Sağ orta ]; Bu diziye eklediğiniz noktaları, Fisher–Yates shuffle yöntemiyle karıştırarak spawn sırasını rastgele hale getirebilirsiniz. js Kopyala Düzenle 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; } 2. Dalga Halinde 0.6 Saniye Arayla Spawn Etme Spawn noktalarını karıştırdıktan sonra, her bir noktadan 0.6 saniye arayla FlyinEnemy oluşturmak için bir döngü kullanabilirsiniz. Örneğin: js Kopyala Düzenle spawnPoints.forEach(function(point, index) { LK.setTimeout(function() { var enemy = new FlyinEnemy(); // Homing davranışı: spawn anında oyuncuya yönelim için gerekli ayarlama enemy.homing = true; enemy.x = point.x; enemy.y = point.y; // Oyuncunun mevcut konumuna göre hız vektörünü hesaplayın var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) distance = 1; // Bölme hatasını engellemek için enemy.vx = (dx / distance) * enemy.speed; enemy.vy = (dy / distance) * enemy.speed; // Eğer spawn noktası sol tarafta ise, düşmanı mirror (ters) yapın if (enemy.x < 1024) { // 1024 = ekran genişliğinin yarısı (2048/2) enemy.flipX = true; // Veya: enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 600); // Her bir düşman arasında 600 ms gecikme }); Bu yapı, spawn dizisindeki her noktadan sırasıyla düşman üretir. Her düşman spawn olduğunda, oyuncunun o anki konumunu referans alarak hız bileşenleri (vx, vy) hesaplanır. Böylece düşmanlar oyuncuya doğru yönlenir. 3. Dalga Spawn İşlemini Tetikleme Fade efektiniz tamamlandıktan ve yeni oyuncu (player) spawn edildikten sonra bu dalga spawn işlemini tetikleyebilirsiniz. Örneğin, fade sonrasında belirli bir gecikme (örneğin 800 ms) ekleyip: js Kopyala Düzenle LK.setTimeout(function(){ spawnWaveOfFlyinEnemies(); // Yukarıdaki fonksiyonu çağırın }, 800); Bu çağrı, fade işlemi sonrasında ek olarak 8 adet homing davranışlı FlyinEnemy spawn edecektir. Özet Spawn Noktaları: Ekranın 8 farklı köşesinden/kenarından sabit koordinatları belirleyin. Karıştırma: Fisher–Yates algoritması ile spawn noktasını rastgele sıraya koyun. Dalga Spawn: Her düşmanı 0.6 saniye arayla spawn edin; her düşmanın oyuncuya doğru yönelim sağlaması için hız vektörlerini hesaplayın. Mirroring: Eğer spawn noktası ekranın sol tarafındaysa, düşmanı flipX (veya scaleX = -1) ayarı ile ters çevirin. Tetikleme: Fade sonrası oyuncu spawn edildikten belli bir gecikme (örneğin 800 ms) ile bu fonksiyonu çağırarak dalga spawn işlemini başlatın. Bu adımları uyguladığınızda, fade sonrası oyuncu yeniden doğduğunda 8 adet FlyinEnemy, 0.6 saniye arayla farklı noktalardan spawn olup oyuncuya doğru hareket edecektir. Böylece Level2 kısmı referansına ihtiyaç duymadan istediğiniz davranışı elde edebilirsiniz.
User prompt
make flyin enemy spawn only 1 coin and the coin is the one 60 pixel down then the other
User prompt
spawn flyinenemy death coin 60 pixel down
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'enemies[j].update();' Line Number: 646
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'flyinEnemies[n].update();' Line Number: 685
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'homing')' in or related to this line: 'if (!flyinEnemies[n].homing && flyinEnemies[n].x < -50) {' Line Number: 721
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'flyinEnemies[n].update();' Line Number: 645
User prompt
karakter controle geldikten sonra kısa süreliğine yok oluyor fade in fade outtan sonra tekrar spawn oluyor bu spawn olduktan sonra aşağıdaki adımları izleyerek, karakter ikinci kez spawn olduktan 0.8 saniye sonra ekranın 8 ayrı kenar/köşe noktasından (rastgele sırayla) FlyinEnemy’lerin doğmasını ve oyuncuya doğru hareket etmesini sağlayabilirsiniz: 1) FlyinEnemy’lerin Oyuncuya Doğru Hareket Etmesi Mevcut FlyinEnemy sınıfı sadece x ekseninde sola doğru gidiyor. Bunun yerine, spawn olurken oyuncunun konumuna doğru bir hız vektörü hesaplayacağız. Aşağıdaki örnek, düşmanın doğduğu anda oyuncunun o anki konumuna doğru ilerlemesini sağlar. FlyinEnemy’yi güncelleyin veya benzer bir yeni sınıf oluşturun. Burada örnek olarak varolan FlyinEnemy'yi düzenliyoruz: js Kopyala Düzenle var FlyinEnemy = Container.expand(function () { var self = Container.call(this); // Görsel ekleme var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0.5 // Dilerseniz 0 yerine 0.5 alabilirsiniz }); self.speed = 5; self.zIndex = 10; self.canDamage = true; // Bu değişkenleri sonradan atayacağız self.vx = 0; self.vy = 0; // Update fonksiyonunda sola gitmek yerine (self.x -= self.speed) // vektör hızına göre hareket edelim: self.update = function () { self.x += self.vx; self.y += self.vy; // Örnek olarak, ekran dışına çıkarsa yok et if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } }; return self; }); Burada vx ve vy değerlerini düşman yaratıldığı anda hesaplayacağız. Böylece her FlyinEnemy, spawn olduğu noktadan oyuncunun konumuna doğru gidecek. 2) 8 Yönden Rastgele Sırayla Spawn Olacak Bir Fonksiyon Yazmak Aşağıdaki fonksiyon, 8 farklı kenar/köşe noktasını (örnek olarak) bir diziye alır, bu diziyi karıştırır (shuffle), sonra sırayla FlyinEnemy üretir. Her üretilen düşman, spawn olduğu anda oyuncunun o anki konumuna doğru hız vektörünü ayarlar. Ayrıca her spawn arasında küçük bir gecikme yaparak “rastgele sırayla” ekrana giriş efektini elde ederiz. js Kopyala Düzenle function spawnWaveOfFlyinEnemies() { // Ekranın 8 farklı noktası (sol-üst, sağ-üst, sol-alt, sağ-alt, vs.) var spawnPoints = [ { x: 0, y: 0 }, // Sol üst köşe { x: 2048, y: 0 }, // Sağ üst köşe { x: 0, y: 2732 }, // Sol alt köşe { x: 2048, y: 2732 }, // Sağ alt köşe { x: 1024, y: 0 }, // Üst orta { x: 1024, y: 2732 }, // Alt orta { x: 0, y: 1366 }, // Sol orta { x: 2048, y: 1366 } // Sağ orta ]; // Diziyi karıştırma (Fisher–Yates shuffle) 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; } // Sırayla spawn etme var index = 0; function spawnNext() { if (index >= spawnPoints.length) { return; // Hepsini spawn ettik } var point = spawnPoints[index]; index++; // Yeni FlyinEnemy oluştur var fe = new FlyinEnemy(); fe.x = point.x; fe.y = point.y; // Oyuncunun o anki konumuna doğru hız vektörü hesapla var dx = player.x - fe.x; var dy = player.y - fe.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) distance = 1; // Bölme hatasını önlemek için fe.vx = (dx / distance) * fe.speed; fe.vy = (dy / distance) * fe.speed; // Oyuna ekle ve flyinEnemies dizisine dahil et game.addChild(fe); flyinEnemies.push(fe); // Sonraki düşmanı rastgele bir gecikme ile spawn et (200-500 ms arası) var nextDelay = Math.random() * 300 + 200; LK.setTimeout(spawnNext, nextDelay); } spawnNext(); } Not: Buradaki 8 nokta örnek amaçlı verilmiştir. İsterseniz tam köşeler ve kenar ortaları yerine, farklı koordinatlarla veya tamamen rastgele kenar noktalarıyla da spawn edebilirsiniz. 3) İkinci Spawn Sonrasında 0.8 Saniye Gecikmeyle Bu Fonksiyonu Çağırmak Kodunuzda ikinci kez karakterin fade sonrasında spawn olduğu kısım enhancedFadeEffect() içinde bulunuyor. Orada yeni oyuncu (newPlayer) oluşturduktan hemen sonra (veya fade-in bittiğinde) 0.8 saniye bekleyip spawnWaveOfFlyinEnemies() fonksiyonunu çağırabilirsiniz. Örneğin, enhancedFadeEffect() fonksiyonunun ilgili kısmında: js Kopyala Düzenle // Spawn player 0.5 seconds after Tube2's location LK.setTimeout(function () { var newPlayer = new Player(); 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); // Global player değişkenini güncelle player = newPlayer; // Weapon fonksiyonunu yeniden aktif et game.weaponEnabled = true; // *** 0.8 sn sonra 8 yönden dalga halinde FlyinEnemy spawn et *** LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); }, 500); Bu şekilde, karakter ikinci kez göründükten 0.8 saniye sonra spawnWaveOfFlyinEnemies() tetiklenecek ve düşmanlar rastgele sırayla 8 noktadan oyuncuya doğru hareket etmeye başlayacak. Ek Öneriler Eğer bu dalga bittikten sonra tekrar dalgalar halinde gelmesini isterseniz, spawnWaveOfFlyinEnemies() içindeki son spawnNext() çağrısı tamamlandıktan sonra tekrar fonksiyonu çağırabilirsiniz. Oyuncu sürekli hareket ediyorsa ve düşmanların her frame oyuncuya kilitlenmesini (homing) istiyorsanız, fe.update içinde her kare dx, dy hesaplaması yapmanız gerekir. Yukarıdaki örnekte, düşmanlar spawn anında oyuncunun konumunu referans alıyor ve sabit bir yönde ilerliyor. Düşmanların ekrandan çıktığında yok olması (örneğin if (self.x < -200 ...) self.destroy();) gibi ek koşullarla bellek kullanımını kontrol edebilirsiniz.
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'flyinEnemies[n].update();' Line Number: 653
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'flyinEnemies[n].update();' Line Number: 649
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in or related to this line: 'flyinEnemies[n].update();' Line Number: 644
User prompt
1m 35s hakkında Akıl yürütüldü Aşağıdaki adımları izleyerek, karakter ikinci kez spawn olduktan 0.8 saniye sonra ekranın 8 ayrı kenar/köşe noktasından (rastgele sırayla) FlyinEnemy’lerin doğmasını ve oyuncuya doğru hareket etmesini sağlayabilirsiniz: 1) FlyinEnemy’lerin Oyuncuya Doğru Hareket Etmesi Mevcut FlyinEnemy sınıfı sadece x ekseninde sola doğru gidiyor. Bunun yerine, spawn olurken oyuncunun konumuna doğru bir hız vektörü hesaplayacağız. Aşağıdaki örnek, düşmanın doğduğu anda oyuncunun o anki konumuna doğru ilerlemesini sağlar. FlyinEnemy’yi güncelleyin veya benzer bir yeni sınıf oluşturun. Burada örnek olarak varolan FlyinEnemy'yi düzenliyoruz: js Kopyala Düzenle var FlyinEnemy = Container.expand(function () { var self = Container.call(this); // Görsel ekleme var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0.5 // Dilerseniz 0 yerine 0.5 alabilirsiniz }); self.speed = 5; self.zIndex = 10; self.canDamage = true; // Bu değişkenleri sonradan atayacağız self.vx = 0; self.vy = 0; // Update fonksiyonunda sola gitmek yerine (self.x -= self.speed) // vektör hızına göre hareket edelim: self.update = function () { self.x += self.vx; self.y += self.vy; // Örnek olarak, ekran dışına çıkarsa yok et if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } }; return self; }); Burada vx ve vy değerlerini düşman yaratıldığı anda hesaplayacağız. Böylece her FlyinEnemy, spawn olduğu noktadan oyuncunun konumuna doğru gidecek. 2) 8 Yönden Rastgele Sırayla Spawn Olacak Bir Fonksiyon Yazmak Aşağıdaki fonksiyon, 8 farklı kenar/köşe noktasını (örnek olarak) bir diziye alır, bu diziyi karıştırır (shuffle), sonra sırayla FlyinEnemy üretir. Her üretilen düşman, spawn olduğu anda oyuncunun o anki konumuna doğru hız vektörünü ayarlar. Ayrıca her spawn arasında küçük bir gecikme yaparak “rastgele sırayla” ekrana giriş efektini elde ederiz. js Kopyala Düzenle function spawnWaveOfFlyinEnemies() { // Ekranın 8 farklı noktası (sol-üst, sağ-üst, sol-alt, sağ-alt, vs.) var spawnPoints = [ { x: 0, y: 0 }, // Sol üst köşe { x: 2048, y: 0 }, // Sağ üst köşe { x: 0, y: 2732 }, // Sol alt köşe { x: 2048, y: 2732 }, // Sağ alt köşe { x: 1024, y: 0 }, // Üst orta { x: 1024, y: 2732 }, // Alt orta { x: 0, y: 1366 }, // Sol orta { x: 2048, y: 1366 } // Sağ orta ]; // Diziyi karıştırma (Fisher–Yates shuffle) 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; } // Sırayla spawn etme var index = 0; function spawnNext() { if (index >= spawnPoints.length) { return; // Hepsini spawn ettik } var point = spawnPoints[index]; index++; // Yeni FlyinEnemy oluştur var fe = new FlyinEnemy(); fe.x = point.x; fe.y = point.y; // Oyuncunun o anki konumuna doğru hız vektörü hesapla var dx = player.x - fe.x; var dy = player.y - fe.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) distance = 1; // Bölme hatasını önlemek için fe.vx = (dx / distance) * fe.speed; fe.vy = (dy / distance) * fe.speed; // Oyuna ekle ve flyinEnemies dizisine dahil et game.addChild(fe); flyinEnemies.push(fe); // Sonraki düşmanı rastgele bir gecikme ile spawn et (200-500 ms arası) var nextDelay = Math.random() * 300 + 200; LK.setTimeout(spawnNext, nextDelay); } spawnNext(); } Not: Buradaki 8 nokta örnek amaçlı verilmiştir. İsterseniz tam köşeler ve kenar ortaları yerine, farklı koordinatlarla veya tamamen rastgele kenar noktalarıyla da spawn edebilirsiniz. 3) İkinci Spawn Sonrasında 0.8 Saniye Gecikmeyle Bu Fonksiyonu Çağırmak Kodunuzda ikinci kez karakterin fade sonrasında spawn olduğu kısım enhancedFadeEffect() içinde bulunuyor. Orada yeni oyuncu (newPlayer) oluşturduktan hemen sonra (veya fade-in bittiğinde) 0.8 saniye bekleyip spawnWaveOfFlyinEnemies() fonksiyonunu çağırabilirsiniz. Örneğin, enhancedFadeEffect() fonksiyonunun ilgili kısmında: js Kopyala Düzenle // Spawn player 0.5 seconds after Tube2's location LK.setTimeout(function () { var newPlayer = new Player(); 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); // Global player değişkenini güncelle player = newPlayer; // Weapon fonksiyonunu yeniden aktif et game.weaponEnabled = true; // *** 0.8 sn sonra 8 yönden dalga halinde FlyinEnemy spawn et *** LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); }, 500); Bu şekilde, karakter ikinci kez göründükten 0.8 saniye sonra spawnWaveOfFlyinEnemies() tetiklenecek ve düşmanlar rastgele sırayla 8 noktadan oyuncuya doğru hareket etmeye başlayacak. Ek Öneriler Eğer bu dalga bittikten sonra tekrar dalgalar halinde gelmesini isterseniz, spawnWaveOfFlyinEnemies() içindeki son spawnNext() çağrısı tamamlandıktan sonra tekrar fonksiyonu çağırabilirsiniz. Oyuncu sürekli hareket ediyorsa ve düşmanların her frame oyuncuya kilitlenmesini (homing) istiyorsanız, fe.update içinde her kare dx, dy hesaplaması yapmanız gerekir. Yukarıdaki örnekte, düşmanlar spawn anında oyuncunun konumunu referans alıyor ve sabit bir yönde ilerliyor. Düşmanların ekrandan çıktığında yok olması (örneğin if (self.x < -200 ...) self.destroy();) gibi ek koşullarla bellek kullanımını kontrol edebilirsiniz.
User prompt
Clear enemies and flying enemies 0.4 seconds after player intersects with control asset
User prompt
33 saniye hakkında Akıl yürütüldü Aşağıdaki örnekte, kontrol assetine (control) dokunulduğu anda (yani karakter kontrol assetine değdiğinde) hem enemy hem de flyin enemy nesnelerinin temizlenmesi için control.update fonksiyonunu aşağıdaki gibi güncelleyebilirsiniz. Böylece karakterin yok olduğu geçiş sırasında, ekrandaki düşmanlar da temizlenir: js Kopyala Düzenle control.update = function () { if (coinCounter >= 1 && player.intersects(control)) { game.controlActive = true; // Ekrandaki tüm enemy nesnelerini temizle for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } // Ekrandaki tüm flyin enemy nesnelerini temizle for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } // Tüm oyun nesnelerinin update fonksiyonlarını boş fonksiyon yaparak oyunu donduruyoruz 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(); } }; Bu düzenleme sayesinde, karakter kontrol assetine değdiğinde: İlk olarak game.controlActive true yapılır. enemies ve flyinEnemies dizilerinde bulunan tüm nesneler destroy edilip listeden kaldırılır. Sonrasında tüm oyun nesnelerinin update fonksiyonları boş hale getirilir (oyun dondurulur). 0.33 saniye sonra karakter destroy edilir ve fade efekt ile geçiş sağlanır. Yeni arka plan (background2), tube_2 spawn ve karakter yeniden spawn işlemleri enhancedFadeEffect() içerisinde yapılır.
User prompt
26 saniye hakkında Akıl yürütüldü Oyuncunun (karakterin) yok olduğu anda ekrandaki düşman (enemy), uçan düşman (flyin enemy) ve coin nesnelerinin de kaldırılmasını sağlamak için, oyuncunun yok olduğu durumlarda bu nesneleri temizlemeniz gerekir. Örneğin, Player sınıfındaki loseHeart() fonksiyonunda oyuncunun kalp sayısı sıfıra ulaştığında (yani oyuncu öldüğünde) aşağıdaki gibi ilgili dizilerdeki nesneleri destroy() metodu ile kaldırıp, dizileri temizleyebilirsiniz: js Kopyala Düzenle 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(); } if (self.hearts <= 0) { // Ekrandaki tüm enemy nesnelerini yok et for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } // Ekrandaki tüm flyin enemy nesnelerini yok et for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } // Ekrandaki tüm coin nesnelerini yok et for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; // Weapon fonksiyonu devre dışı bırakılıyor. } };
User prompt
kalpleri 10 pixel sağa koy
User prompt
kalpleri 50 pixel sağa koy
User prompt
kalpleri 50 pixel sağa koy
User prompt
Oyuncu öldüğünde silme ve weapon fonksiyonunu devre dışı bırakma: Mevcut Player sınıfındaki loseHeart() fonksiyonunda oyuncu kalp sayısı 0'a düştüğünde zaten: js Kopyala Düzenle if (self.hearts <= 0) { self.destroy(); game.weaponEnabled = false; // Weapon fonksiyonu devre dışı bırakılıyor. } Bu kısım mevcut ve oyuncu öldüğünde weapon fonksiyonunun devre dışı kalmasını sağlıyor. Oyuncu yeniden spawn olduğunda global oyuncu referansını güncelleme ve weapon fonksiyonunu yeniden aktif hale getirme: Şu anda yeniden oyuncu spawn işlemi enhancedFadeEffect() fonksiyonunda yapılıyor. Ancak burada oluşturulan yeni oyuncu nesnesini global “player” değişkenine atamıyorsunuz ve game.weaponEnabled değeri true olarak ayarlanmıyor. Bu nedenle yeni oyuncu spawn edildiğinde weapon fonksiyonu oyuncuyla birlikte aynı anda aktif hale gelmiyor. Değiştirilmesi gereken kısım: Bulunduğunuz enhancedFadeEffect() fonksiyonunda, yeni oyuncu oluşturduğunuz timeout bloğunu aşağıdaki gibi güncelleyin: js Kopyala Düzenle LK.setTimeout(function () { var newPlayer = new Player(); 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; // Global player değişkenini güncelle game.weaponEnabled = true; // Weapon fonksiyonunu yeniden aktif et }, 500); Bu iki adım sayesinde; Oyuncu öldüğünde weapon fonksiyonu devre dışı kalacak, Yeniden spawn olduğunda oyuncu global olarak güncellenecek ve weapon fonksiyonu tekrar aktif hale gelecektir.
/**** * 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.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.vx = 0; self.vy = 0; self.update = function () { 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; // Normal player position self.zIndex = 20; self.hearts = 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; // Re-enable weapon functionality } } 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.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(); } if (self.hearts <= 0) { // Destroy all enemy objects on screen for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } // Destroy all flying enemy objects on screen for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } // Destroy all coin objects on screen for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; // Disable weapon functionality } }; }); // 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; // Match the speed of background2 self.zIndex = 2000; // Ensure it appears in front of the background 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 ****/ 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; } var index = 0; function spawnNext() { if (index >= spawnPoints.length) { return; } var point = spawnPoints[index]; index++; var fe = new FlyinEnemy(); fe.x = point.x; fe.y = point.y; var dx = player.x - fe.x; var dy = player.y - fe.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) { distance = 1; } fe.vx = dx / distance * fe.speed; fe.vy = dy / distance * fe.speed; game.addChild(fe); flyinEnemies.push(fe); var nextDelay = Math.random() * 300 + 200; LK.setTimeout(spawnNext, nextDelay); } spawnNext(); } // Global Variables var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; game.controlActive = false; var coins = []; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var clearTriggered = false; var stopSpawn = false; // Fade sonrası spawn duracak game.weaponEnabled = true; // Enable weapon functionality at the beginning // Fade Effect Function function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) { return; } game.isFading = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; if (!overlay.parent) { LK.stage.addChild(overlay); } var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; // Fade-Out: overlay.alpha 0 -> 1 var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; stopSpawn = true; // Spawn işlemleri durdu while (game.children.length > 0) { game.removeChild(game.children[0]); } // Create a single ScrollingBackground2 var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); // Add Tube2 separately on top of ScrollingBackground2 with x shifted 30 pixels to the right var tube2 = new Tube2(); tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); // Spawn player 0.5 seconds after Tube2's location LK.setTimeout(function () { var newPlayer = new Player(); 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; // Global player değişkenini güncelle game.weaponEnabled = true; // Weapon fonksiyonunu yeniden aktif et // *** 0.8 sn sonra 8 yönden dalga halinde FlyinEnemy spawn et *** LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); }, 500); // Fade-In: ScrollingBackground2'nin alpha 0 -> 1 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); } // Artık update fonksiyonuna dokunmadan normal update devam ediyor. // Ancak background2 ve tube2'nin hareketini 2 saniye süreyle dondurmak için hızlarını 0 yapıyoruz: 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; game.isFading = false; game.fadeCompleted = true; }, 2000); // 2000 ms = 2 saniye bekle, sonra eski hızlarına döndür. } }, fadeInStepTime); } }, stepTime); } // Yardımcı Fonksiyon: ScrollingBackground2 Oluştur function createScrollingBackground2() { var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; LK.stage.addChild(scrollingBg2); game.scrollingBg2 = scrollingBg2; // Add tube_2 to scrollingBg2 to ensure it is visible on background2 var tube2 = new Tube2(); tube2.x = 2048 + tube2.width / 2; tube2.y = tube2.height / 2 - 30; game.addChild(tube2); } // 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 control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (coinCounter >= 1 && player.intersects(control)) { game.controlActive = true; LK.setTimeout(function () { // Clear all enemy objects on screen for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } // Clear all flying enemy objects on screen 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(); } }; 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 - 60; counterBackground.y = 40; var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 83; 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); } // Flyin Enemy Spawn (devre dışı) function spawnFlyinEnemy() { if (stopSpawn) { return; } var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) { return; } var flyinEnemy = new FlyinEnemy(); flyinEnemy.x = 2048; flyinEnemy.y = 449; flyinEnemy.zIndex = 10; game.addChild(flyinEnemy); flyinEnemies.push(flyinEnemy); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); // 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 (!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); }); for (var j = enemies.length - 1; j >= 0; 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; 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--) { 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])) { var coin = new Coin(); coin.x = flyinEnemies[n].x + 60; coin.y = flyinEnemies[n].y + 130; 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 + 60; particleEffect.y = flyinEnemies[n].y + 130; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && 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); } } if (coinCounter > 1 && !clearTriggered) { for (var t = 0; t < game.children.length; t++) { var tube = game.children[t]; if (tube instanceof Tube) { var tubeTop = tube.y - 187.5; var playerBottom = player.y + 75; var horizontalDistance = Math.abs(player.x - tube.x); if (playerBottom >= tubeTop && playerBottom <= tubeTop + 20 && horizontalDistance < 115) { clearTriggered = true; stopSpawn = true; 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(); }, 400); break; } } } } }; 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(); }; LK.stage.addChild(game);
===================================================================
--- original.js
+++ change.js
@@ -35,9 +35,9 @@
var FlyinEnemy = Container.expand(function () {
var self = Container.call(this);
var flyinEnemyGraphics = self.attachAsset('flyin_enemy', {
anchorX: 0.5,
- anchorY: 0
+ anchorY: 0.5
});
self.speed = 5;
self.zIndex = 10;
self.canDamage = true;
@@ -371,12 +371,13 @@
newPlayer.fallTargetY = 2732 / 2 - 7;
game.addChild(newPlayer);
player = newPlayer; // Global player değişkenini güncelle
game.weaponEnabled = true; // Weapon fonksiyonunu yeniden aktif et
+ // *** 0.8 sn sonra 8 yönden dalga halinde FlyinEnemy spawn et ***
+ LK.setTimeout(function () {
+ spawnWaveOfFlyinEnemies();
+ }, 800);
}, 500);
- LK.setTimeout(function () {
- spawnWaveOfFlyinEnemies();
- }, 800);
// Fade-In: ScrollingBackground2'nin alpha 0 -> 1
var fadeInDuration = 500;
var fadeInStepTime = fadeInDuration / steps;
var fadeInInterval = LK.setInterval(function () {
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