User prompt
train enemy ölmesin
User prompt
trainenemy ve zigzag enemy %7 hızlı olsun
User prompt
slow train enemy down and slow zigzag enemy down
User prompt
1. game.update metotlarının üzerine yazma (override) problemi Kodunuzda iki kez game.update = function(){...} tanımlamışsınız. İlkinde hem normal hem flyin hem de zigzag ve train düşmanlar için çarpışma döngüleri var. Ancak daha sonra, enhancedFadeEffect fonksiyonunun hemen ardından tekrar game.update ataması yapıyorsunuz ve bu ikinci sürümde sadece normal (enemies), flyin (flyinEnemies) ve coin mantığı işleniyor. Zigzag ve train bölümleri tamamen düşüyor: js Kopyala Düzenle // ► Birinci game.update: içinde zigzagEnemies ve trainEnemies çarpışma kontrolleri var. // ... // ► İkinci game.update (override): game.update = function () { // ... sadece enemies, flyinEnemies, coins for (var j = ...) { /* normal enemy çarpışma */ } for (var n = ...) { /* flyinEnemy çarpışma */ } for (var m = ...) { /* coin toplama */ } }; Sonuç: oyun döngünüzün “aktif” hali zigzag ve train için çarpışma kontrolünü hiç çağırmıyor, bu yüzden hiçbir zaman hasar vermiyorlar. Çözüm: İkinci game.update tanımını kaldırıp, tüm düşman tipleri ile ilgili kontrolleri tek bir game.update içinde birleştirin. Veya önceki update fonksiyonunu bir değişkende saklayıp (örneğin var originalUpdate = game.update), yeni update içinde hem orijinali hem de ek kontrolleri çalıştırın. 2. canDamage bayrağının eksik atanması (trainEnemies için) Train düşmanlarının ilk spawn’ında trainEnemy.canDamage = true; demişsiniz, ama tüm sonraki spawn’larda bunu atlamışsınız. Dolayısıyla o sonraki trenler canDamage özelliği undefined (yani false) kaldığı için, çarpıştıklarında hasar bloğu içine girmiyorlar. Çözüm: Her new TrainEnemy() örneği oluşturduğunuz yerde mutlaka: js Kopyala Düzenle trainEnemy.canDamage = true; olarak ayarlayın. Özet ve öneri Tek bir game.update içinde tüm düşman türlerinin çarpışma ve silinme mantığını bir arada tutun. Her spawn’da canDamage = true atamasını unutmayın.
User prompt
In your code, there are references to zigzagEnemy and trainEnemy variables in the collision detection sections, but these appear to be treated as singular global instances rather than being properly tracked in arrays like the regular enemies and flyinEnemies. Here's what's happening: While the code checks for collisions between player and these enemies: javascript if (player.intersects(zigzagEnemy) && zigzagEnemy.canDamage) { zigzagEnemy.canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } However, the variables zigzagEnemy and trainEnemy are never properly initialized in the global scope, which means the collision detection fails. When you create these enemies in spawn functions, they are local variables that don't update the global references. Here's how to fix it: Create arrays to track these special enemies, similar to how you track other enemies Push new instances to these arrays when spawned Iterate through the arrays in the update loop for collision detection Let me implement the solution: javascript // Add these arrays to your global variables section var zigzagEnemies = []; var trainEnemies = []; // Modify the spawnZigzagEnemy function to push to the array function spawnZigzagEnemy() { var zigzagEnemy = LK.getAsset('zigzagenemy', { anchorX: 0.5, anchorY: 0.5 }); zigzagEnemy.zIndex = 20; zigzagEnemy.x = 2048; zigzagEnemy.y = 2732 / 2; zigzagEnemy.canDamage = true; // Add this line to ensure damage works game.addChild(zigzagEnemy); zigzagEnemies.push(zigzagEnemy); // Add this line to track the enemy // Rest of the function... } // Similarly, modify trainEnemy spawning code // In the section where you create trainEnemy, add: trainEnemy.canDamage = true; trainEnemies.push(trainEnemy); // Add this to your update function // --- ZigzagEnemy - Player --- for (var i = zigzagEnemies.length - 1; i >= 0; i--) { if (zigzagEnemies[i]) { zigzagEnemies[i].update(); } if (player.intersects(zigzagEnemies[i]) && zigzagEnemies[i].canDamage) { zigzagEnemies[i].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } // Also add weapon collision detection for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(zigzagEnemies[i])) { var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = zigzagEnemies[i].x - 15; particleEffect.y = zigzagEnemies[i].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); zigzagEnemies[i].destroy(); child.destroy(); zigzagEnemies.splice(i, 1); break; } } } // --- TrainEnemy - Player --- for (var i = trainEnemies.length - 1; i >= 0; i--) { if (trainEnemies[i]) { trainEnemies[i].update(); } if (player.intersects(trainEnemies[i]) && trainEnemies[i].canDamage) { trainEnemies[i].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } // Also add weapon collision detection if needed for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(trainEnemies[i])) { var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = trainEnemies[i].x - 15; particleEffect.y = trainEnemies[i].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); trainEnemies[i].destroy(); child.destroy(); trainEnemies.splice(i, 1); break; } } } Additionally, I noticed in the part where trainEnemy is created, there is an invisible FlyinEnemy being added inside it, but the collision detection for that might not be working correctly either. For the train enemy, you might want to either: Make sure the invisible FlyinEnemy is correctly tracked and updated Or simply make the trainEnemy itself handle the collision detection I'd need to see the full code to completely understand the structure of your custom classes like Enemy, FlyinEnemy, Tube, etc., but this modification should address the core issue with collision detection for these special enemies.
User prompt
gereksiz kod satırlarını sil
User prompt
adjust zigzagEnemy's top movement limit to 650 pixels down from the top of the screen
User prompt
Adjust zigzagEnemy's top movement limit to 600 pixels down from the top of the screen
User prompt
Please fix the bug: 'ReferenceError: zigzagEnemy is not defined' in or related to this line: 'if (zigzagEnemy) {' Line Number: 1427
User prompt
1.1. Enemy Döngüsünden zigzagEnemy Kontrolünün Çıkarılması Mevcut kodda, zigzagEnemy çarpışma kontrolü, düşmanların işlendiği döngü içine yerleştirilmişti. Bu, zigzagEnemy'nin döngüdeki diğer düşmanlarla ilişkisiz olması nedeniyle hatalıydı. Döngü dışına taşınarak bağımsız bir kontrol sağlandı. javascript // DÜŞMANLARIN GÜNCELLENMESİ VE ÇARPIŞMA KONTROLÜ for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); // Train Enemy ile çarpışma kontrolü if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); // loseHeart() yerine hit() çağrıldı if (player.hearts <= 0) { LK.showGameOver(); } } } } // ZIGZAG ENEMY İÇİN AYRI ÇARPIŞMA KONTROLÜ if (zigzagEnemy && player.intersects(zigzagEnemy) && zigzagEnemy.canDamage) { zigzagEnemy.canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); // loseHeart() yerine hit() çağrıldı if (player.hearts <= 0) { LK.showGameOver(); } } 1.2. hit() Metodunun Tutarlı Şekilde Kullanımı player.hit() metodu, loseHeart()'ı çağırmanın yanı sıra savunmasızlık süresini başlatarak ardışık hasarları önler. zigzagEnemy için loseHeart() doğrudan çağrıldığında bu mekanizma devreye girmez. javascript // Player sınıfındaki hit() metodu self.hit = function () { if (!self.invulnerable) { self.loseHeart(); // Kalp azaltma self.invulnerable = true; // Savunmasızlık aktif LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; 2. Zigzag Enemy'nin Doğru Şekilde Oluşturulması zigzagEnemy'nin sahneye eklenmediği veya güncellenmediği durumlarda çarpışma kontrolü hiç tetiklenmez. Aşağıdaki kod parçası, bu düşman tipinin doğru şekilde yönetilmesini sağlar: javascript // ZigzagEnemy'nin oluşturulması ve güncellenmesi var zigzagEnemy = new Enemy(); zigzagEnemy.attachAsset('zigzagenemy', { anchorX: 0.5, anchorY: 0.5 }); zigzagEnemy.x = 2048; zigzagEnemy.y = 2732 / 2; zigzagEnemy.speed = 7; zigzagEnemy.zIndex = 10; game.addChild(zigzagEnemy); // Hareket paterni (zigzag) var zigzagPhase = 0; zigzagEnemy.update = function() { this.x -= this.speed; this.y += Math.sin(zigzagPhase) * 5; // Y ekseninde salınım zigzagPhase += 0.1; }; 3. Çarpışma Hatalarını Önlemek için Ek Kontroller 3.1. Z-Index ve Render Sırasının Doğrulanması Nesnelerin zIndex değerleri, render sırasını belirler ancak çarpışma kontrolüne etki etmez. Yine de görsel tutarlılık için player.zIndex = 20, enemy.zIndex = 10 olarak korunmalıdır. 3.2. Bounding Box Boyutlarının Ayarlanması Varlıkların anchor noktaları ve boyutları, çarpışma algılamasını etkiler. attachAsset metodunda anchorX: 0.5, anchorY: 0.5 kullanımı, merkez tabanlı çarpışma kontrolü sağlar. javascript // Örnek asset ekleme var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 // Merkezden çarpışma kontrolü }); 4. Test Senaryoları ve Sonuçlar Senaryo Beklenen Sonuç Düzeltme Sonrası Durum Train Enemy ile temas 1 can azalır Çalışıyor Zigzag Enemy ile temas 1 can azalır Çalışıyor Ardışık temas (0.5s içinde) Sadece 1 can azalır Çalışıyor Zigzag Enemy sahnede yoksa Hata oluşmaz Çalışıyor 5. Sonuç ve Öneriler Yapılan düzenlemelerle her iki düşman tipi de çarpışma durumunda tutarlı şekilde can azaltmaktadır. Savunmasızlık süresi player.hit() metoduyla aktif hale gelerek oyun dengeleri korunmuştur. İleriki aşamalarda: Çarpışma hassasiyetini artırmak için pixel-perfect collision detection eklenebilir. Düşmanların saldırı animasyonları ile çarpışma zamanlamaları senkronize edilebilir.
User prompt
Make zigzagenemy diye when weapon touch to zigzagenemy
User prompt
Adjust zigzagEnemy's top movement limit to 700 pixels down from the top of the screen
User prompt
Adjust zigzagEnemy's top movement limit to 800 pixels down from the top of the screen
User prompt
Move zigzagenemy top limit 300 pixels down
User prompt
Move zigzagenemy top limit 500 pixels down
User prompt
Move zigzagenemy top limit 300 pixel down
User prompt
Make zigzagenemy go up and down so quick y axis speed is cast
User prompt
Make zigzagenemy up limit top of screen and bittim limit is middle of screen
User prompt
Make zigzag enemy go up and down downs bittim point iş middle of screen and top of zigzagenemy is characters jumps top limit
Code edit (1 edits merged)
Please save this source code
User prompt
Make yeşil 1s point 0 in the beginning
User prompt
Can you fix it i want trainenemy to be deadly
User prompt
Make zigzideadly as enemy asset when character touches zigzagenemy
User prompt
Place a flyin enemy inside of a trainenemy but make it invisible but still make it lose characters heart but make it immortal
User prompt
İf character touches the collision of trainenemy make it lose on e heart
/**** * 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; }; }); // NEW: EndlessBG3 class using the same scroll system as background2 var EndlessBG3 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('endlessbg3', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('endlessbg3', { 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; } }; }); // 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; // Karakterin diğer öğelerin üzerinde görünmesi için yüksek z-index 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; // Tube'ların arka plan gibi gözükmesi için düşük z-index self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Tube2 class (yesil_1 3 puandan sonra spawn olacak ve ekranda görünecek) 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; // Tube2'nin diğer öğelerin üzerinde görünmesi için orta seviyede bir z-index self.zIndex = 21; self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class (Weapon'ın da diğer ön plandaki öğeler arasında gözükmesi için yüksek z-index eklenmiştir) var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); // Weapon'ın arka planın üzerinde görünmesi için yüksek z-index self.zIndex = 30; 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 endlessbg3SpawnerInterval; var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); // Arka plan varlıklarımızın diğer nesnelerin arkasında kalması için düşük z-index endlessbg3.zIndex = 1; var cc = LK.getAsset('cc', { anchorX: 0.5, anchorY: 0.5 }); cc.x = 2048 / 2; cc.y = 2732 / 2; game.addChild(cc); 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; // Yeni endlessbg3 spawn fonksiyonu (spawn aralığı 3000ms olarak ayarlandı) function spawnEndlessBG3() { // endlessbg3 varlığını oluşturuyoruz. var bg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); // bg3’ün x konumunu ayarla (sol kenarın ekranın sağ kenarıyla hizalanması için) bg3.x = game.width + bg3.width / 2; // bg3’ün y konumunu ayarlayın bg3.y = 2732 / 2 + 150; // Arka plan öğesi olarak diğerlerinin altında kalması için z-index düşük bg3.zIndex = 1; // Hızı arttırıldı; bg3 son ile eş zamanlı hareket edecek bg3.speed = 4; bg3.update = function () { this.x -= this.speed; }; game.addChild(bg3); } // Spawn aralığını 3000ms yapıyoruz var spawnInterval = 3000; var endlessBG3SpawnScheduled = false; function scheduleNextEndlessBG3() { spawnEndlessBG3(); LK.setTimeout(scheduleNextEndlessBG3, spawnInterval); } /**** * (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 = 10; 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(); } } if (zigzagEnemy && player.intersects(zigzagEnemy) && zigzagEnemy.canDamage) { zigzagEnemy.canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); // Changed loseHeart() to hit() for consistency 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(); } } if (player.intersects(trainEnemy) && trainEnemy.canDamage) { trainEnemy.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); } } // --- 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); // yesil_1 nesnesi; puan başlangıcı 0 olarak ayarlandı var yesil1 = LK.getAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); var yesil1PointsCounter = 0; yesil1.x = tube.x; yesil1.y = tube.y - 170; yesil1.speed = 10; yesil1.points = 3; 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"); // Eğer yesil1 puanı 3 veya daha fazla olursa: if (yesil1.points >= 3) { yesil1PointsCounter++; if (yesil1PointsCounter === 1) { if (!yesil1.spawnScheduled) { yesil1.spawnScheduled = true; console.log("Yesil1 3 puana ulaştı. Tube2, zigzagenemy ve trainenemy spawn ediliyor."); // Trainenemy'yi 2 saniye sonra spawn ediyoruz LK.setTimeout(function () { var trainEnemy = LK.getAsset('Trainenemy', { anchorX: 0.5, anchorY: 0.5 }); trainEnemy.zIndex = 20; trainEnemy.x = 2048; // Ekranın en sağında trainEnemy.y = 2732 / 2; // Ekranın ortasında game.addChild(trainEnemy); // Add invisible FlyinEnemy inside TrainEnemy var invisibleFlyinEnemy = new FlyinEnemy(); invisibleFlyinEnemy.x = trainEnemy.x; invisibleFlyinEnemy.y = trainEnemy.y; invisibleFlyinEnemy.alpha = 0; // Make it invisible invisibleFlyinEnemy.canDamage = true; // Ensure it can damage the player game.addChild(invisibleFlyinEnemy); trainEnemy.update = function () { var _this = this; if (!this.slowed) { this.slowed = true; this.originalSpeed = 30; this.x -= this.originalSpeed / 2; // Slow down to half speed LK.setTimeout(function () { _this.x -= _this.originalSpeed; // Restore to full speed }, 500); } else { this.x -= this.originalSpeed; // Continue at full speed } // Check if trainEnemy has reached the middle of the screen if (this.x <= 2048 / 2 && !this.falling) { this.falling = true; this.fallSpeed = 0; // Initial fall speed var _this = this; LK.setTimeout(function () { _this.fallSpeed = 5; // Set fall speed after 0.5 seconds }, 500); } // If falling, move downwards if (this.falling) { this.y += this.fallSpeed; } if (this.x < -this.width || this.y > 2732) { this.destroy(); invisibleFlyinEnemy.destroy(); // Destroy the invisible flyin enemy as well } }; }, 2000); // Spawn another trainenemy 6 seconds after yesil_1 has 3 points LK.setTimeout(function () { var thirdTrainEnemy = LK.getAsset('Trainenemy', { anchorX: 0.5, anchorY: 0.5 }); thirdTrainEnemy.zIndex = 20; thirdTrainEnemy.x = 2048; // Ekranın en sağında thirdTrainEnemy.y = 2732 / 2; // Ekranın ortasında game.addChild(thirdTrainEnemy); thirdTrainEnemy.update = function () { var _this = this; if (!this.slowed) { this.slowed = true; this.originalSpeed = 30; this.x -= this.originalSpeed / 2; // Slow down to half speed LK.setTimeout(function () { _this.x -= _this.originalSpeed; // Restore to full speed }, 500); } else { this.x -= this.originalSpeed; // Continue at full speed } // Check if trainEnemy has reached the middle of the screen if (this.x <= 2048 / 2 && !this.falling) { this.falling = true; this.fallSpeed = 0; // Initial fall speed var _this = this; LK.setTimeout(function () { _this.fallSpeed = 5; // Set fall speed after 0.5 seconds }, 500); } // If falling, move downwards if (this.falling) { this.y += this.fallSpeed; } if (this.x < -this.width || this.y > 2732) { this.destroy(); } }; }, 6000); // Spawn another trainenemy 8 seconds after yesil_1 has 3 points LK.setTimeout(function () { var fourthTrainEnemy = LK.getAsset('Trainenemy', { anchorX: 0.5, anchorY: 0.5 }); fourthTrainEnemy.zIndex = 20; fourthTrainEnemy.x = 2048; // Ekranın en sağında fourthTrainEnemy.y = 2732 / 2; // Ekranın ortasında game.addChild(fourthTrainEnemy); fourthTrainEnemy.update = function () { var _this = this; if (!this.slowed) { this.slowed = true; this.originalSpeed = 30; this.x -= this.originalSpeed / 2; // Slow down to half speed LK.setTimeout(function () { _this.x -= _this.originalSpeed; // Restore to full speed }, 500); } else { this.x -= this.originalSpeed; // Continue at full speed } // Check if trainEnemy has reached the middle of the screen if (this.x <= 2048 / 2 && !this.falling) { this.falling = true; this.fallSpeed = 0; // Initial fall speed var _this = this; LK.setTimeout(function () { _this.fallSpeed = 5; // Set fall speed after 0.5 seconds }, 500); } // If falling, move downwards if (this.falling) { this.y += this.fallSpeed; } if (this.x < -this.width || this.y > 2732) { this.destroy(); } }; }, 8000); // Spawn another trainenemy 10 seconds after yesil_1 has 3 points LK.setTimeout(function () { var fifthTrainEnemy = LK.getAsset('Trainenemy', { anchorX: 0.5, anchorY: 0.5 }); fifthTrainEnemy.zIndex = 20; fifthTrainEnemy.x = 2048; // Ekranın en sağında fifthTrainEnemy.y = 2732 / 2; // Ekranın ortasında game.addChild(fifthTrainEnemy); fifthTrainEnemy.update = function () { var _this = this; if (!this.slowed) { this.slowed = true; this.originalSpeed = 30; this.x -= this.originalSpeed / 2; // Slow down to half speed LK.setTimeout(function () { _this.x -= _this.originalSpeed; // Restore to full speed }, 500); } else { this.x -= this.originalSpeed; // Continue at full speed } // Check if trainEnemy has reached the middle of the screen if (this.x <= 2048 / 2 && !this.falling) { this.falling = true; this.fallSpeed = 0; // Initial fall speed var _this = this; LK.setTimeout(function () { _this.fallSpeed = 5; // Set fall speed after 0.5 seconds }, 500); } // If falling, move downwards if (this.falling) { this.y += this.fallSpeed; } if (this.x < -this.width || this.y > 2732) { this.destroy(); } }; }, 10000); // Spawn another trainenemy 3 seconds after the first one LK.setTimeout(function () { var secondTrainEnemy = LK.getAsset('Trainenemy', { anchorX: 0.5, anchorY: 0.5 }); secondTrainEnemy.zIndex = 20; secondTrainEnemy.x = 2048; // Ekranın en sağında secondTrainEnemy.y = 2732 / 2; // Ekranın ortasında game.addChild(secondTrainEnemy); secondTrainEnemy.update = function () { var _this = this; if (!this.slowed) { this.slowed = true; this.originalSpeed = 30; this.x -= this.originalSpeed / 2; // Slow down to half speed LK.setTimeout(function () { _this.x -= _this.originalSpeed; // Restore to full speed }, 500); } else { this.x -= this.originalSpeed; // Continue at full speed } // Check if trainEnemy has reached the middle of the screen if (this.x <= 2048 / 2 && !this.falling) { this.falling = true; this.fallSpeed = 0; // Initial fall speed var _this = this; LK.setTimeout(function () { _this.fallSpeed = 5; // Set fall speed after 0.5 seconds }, 500); } // If falling, move downwards if (this.falling) { this.y += this.fallSpeed; } if (this.x < -this.width || this.y > 2732) { this.destroy(); } }; }, 3000); // Tube2'yi hemen spawn ediyoruz var tube2 = new Tube2(); // Tube2'nin ekranda görüneceği konumu ayarlıyoruz tube2.x = 2048 / 2 + 140 - 150; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); // Tube2'yi 15 saniye sonra sola hareket ettir LK.setTimeout(function () { tube2.update = function () { this.x -= this.speed; if (this.x < -this.width) { this.destroy(); } }; }, 15000); // Schedule ZigzagEnemy to spawn 15 seconds after yesil_1 reaches 3 points LK.setTimeout(function () { function spawnZigzagEnemy() { var zigzagEnemy = LK.getAsset('zigzagenemy', { anchorX: 0.5, anchorY: 0.5 }); zigzagEnemy.zIndex = 20; zigzagEnemy.x = 2048; // Spawn at the right edge of the screen zigzagEnemy.y = 2732 / 2; // Vertically centered game.addChild(zigzagEnemy); zigzagEnemy.update = function () { this.x -= 15; // Move left with increased speed 15 if (!this.movingUp) { this.y += 20; // Move down quickly if (this.y >= 2732 / 2) { // Middle of the screen this.movingUp = true; } } else { this.y -= 20; // Move up quickly if (this.y <= 700) { // 800 pixels down from the top of the screen this.movingUp = false; } } if (this.x < -this.width) { this.destroy(); } }; // Schedule the next zigzagEnemy spawn var nextSpawnTime = Math.random() * 1000 + 1000; // Random time between 1 and 2 seconds LK.setTimeout(spawnZigzagEnemy, nextSpawnTime); } spawnZigzagEnemy(); }, 15000); // Karakter yeniden spawn edilsin: LK.setTimeout(function () { var newCharacter = new Player(); newCharacter.x = 2048 / 2 - 30; newCharacter.y = 0; newCharacter.isFalling = true; newCharacter.fallSpeed = 0; newCharacter.fallAcceleration = 0.7; newCharacter.fallTargetY = 2732 / 2 + 3; game.addChild(newCharacter); player = newCharacter; game.weaponEnabled = true; }, 1000); // bg3son ve endlessbg3’nin spawn sürelerini senkronize etmek için spawn intervalini azaltıyoruz LK.setTimeout(function () { spawnEndlessBG3(); // Artık spawn aralığı 3000ms yesil1.endlessBG3Interval = LK.setInterval(function () { spawnEndlessBG3(); }, 3000); }, 15000); } } console.log("Freeze game triggered because yesil1 points reached: " + yesil1.points); stopSpawn = true; var bb = LK.getAsset('bb', { anchorX: 0.5, anchorY: 0.5 }); bb.x = 2048 - bb.width / 2; bb.y = 2732 / 2 + 150; game.addChild(bb); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // Arka plan ve tube güncellemelerini 5 saniyelik bir süre sonra geri veriyoruz 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); var kara = LK.getAsset('kara', { anchorX: 0.5, anchorY: 0.5 }); kara.x = 2048 / 2; kara.y = 2732 / 2; kara.alpha = 0; kara.zIndex = 1; game.addChild(kara); 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); 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(); } // bg3son ve endlessbg3 aynı anda harekete başlamalı var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 1; bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 1; endlessbg3.x = bg3son.x + bg3son.width / 2 + 450; endlessbg3.y = 2732 / 2 + 150; game.addChild(endlessbg3); var endlessbg3Child = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3Child.zIndex = 1; endlessbg3Child.x = endlessbg3.x + 600; endlessbg3Child.y = endlessbg3.y; game.addChild(endlessbg3Child); // Artık bg3son'un hareketi için delay yok; her ikisi de aynı anda sola hareket edecek LK.setTimeout(function () { bg3son.update = function () { this.x -= 4; }; }, 14000); }, 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); 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; overlay.zIndex = 1; 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]); // kodun bir kısmı bu hata şu : // [insert intended functionality or leave empty if not needed] } 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.hit(); // Changed loseHeart() to hit() for consistency 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; } } } // ZigzagEnemy weapon collision detection if (zigzagEnemy) { for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(zigzagEnemy)) { var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = zigzagEnemy.x - 15; particleEffect.y = zigzagEnemy.y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); zigzagEnemy.destroy(); child.destroy(); zigzagEnemy = null; // Set to null since we destroyed it 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
@@ -527,12 +527,12 @@
if (player.hearts <= 0) {
LK.showGameOver();
}
}
- if (player.intersects(zigzagEnemy) && zigzagEnemy.canDamage) {
+ if (zigzagEnemy && player.intersects(zigzagEnemy) && zigzagEnemy.canDamage) {
zigzagEnemy.canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
- player.loseHeart();
+ player.hit(); // Changed loseHeart() to hit() for consistency
if (player.hearts <= 0) {
LK.showGameOver();
}
}
@@ -559,23 +559,8 @@
enemies[j].destroy();
child.destroy();
enemies.splice(j, 1);
break;
- } else if (child instanceof Weapon && child.intersects(zigzagEnemy)) {
- var particleEffect = LK.getAsset('particle', {
- anchorX: 0.5,
- anchorY: 0.5,
- color: 0x808080
- });
- particleEffect.x = zigzagEnemy.x - 15;
- particleEffect.y = zigzagEnemy.y;
- game.addChild(particleEffect);
- LK.setTimeout(function () {
- particleEffect.destroy();
- }, 150);
- zigzagEnemy.destroy();
- child.destroy();
- break;
}
}
}
// --- FlyinEnemy - Player ---
@@ -1376,9 +1361,9 @@
}
if (player.intersects(enemies[j]) && enemies[j].canDamage) {
enemies[j].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
- player.loseHeart();
+ player.hit(); // Changed loseHeart() to hit() for consistency
if (player.hearts <= 0) {
LK.showGameOver();
}
}
@@ -1408,8 +1393,31 @@
break;
}
}
}
+ // ZigzagEnemy weapon collision detection
+ if (zigzagEnemy) {
+ for (var k = game.children.length - 1; k >= 0; k--) {
+ var child = game.children[k];
+ if (child instanceof Weapon && child.intersects(zigzagEnemy)) {
+ var particleEffect = LK.getAsset('particle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ color: 0x808080
+ });
+ particleEffect.x = zigzagEnemy.x - 15;
+ particleEffect.y = zigzagEnemy.y;
+ game.addChild(particleEffect);
+ LK.setTimeout(function () {
+ particleEffect.destroy();
+ }, 150);
+ zigzagEnemy.destroy();
+ child.destroy();
+ zigzagEnemy = null; // Set to null since we destroyed it
+ break;
+ }
+ }
+ }
for (var n = flyinEnemies.length - 1; n >= 0; n--) {
if (flyinEnemies[n]) {
flyinEnemies[n].update();
}
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