User prompt
move other endlessbg3 spawn point 10 pixel right
User prompt
move other endlessbg 150 pixel down
User prompt
when yesil 1 has 3 points spawn endlessbg3 at the normal spawn point of endlessbg3 when it created for the first time,create other endlessbg3s every 10 seconds yesil1 has 3 points and make it move to left when spawned
User prompt
Please fix the bug: 'ReferenceError: endlessbg3 is not defined' in or related to this line: 'endlessbg3.spawnedNext = true;' Line Number: 662
User prompt
Please fix the bug: 'TypeError: Cannot read properties of null (reading 'addChild')' in or related to this line: 'bg3son.addChild(newEndlessbg3);' Line Number: 654
User prompt
Please fix the bug: 'ReferenceError: bg3son is not defined' in or related to this line: 'bg3son.addChild(newEndlessbg3);' Line Number: 653
User prompt
when yesil 1 has 3 points spawn endlessbg3 at the normal spawn point of endlessbg3 when it created for the first time,create other endlessbg3s every 10 seconds yesil1 has 3 points
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'y')' in or related to this line: 'newEndlessbg3.y = endlessbg3.y;' Line Number: 678
User prompt
Please fix the bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'x')' in or related to this line: 'newEndlessbg3.x = endlessbg3.x;' Line Number: 673
User prompt
Please fix the bug: 'Timeout.tick error: endlessbg3 is not defined' in or related to this line: 'newEndlessbg3.x = endlessbg3.x;' Line Number: 672
User prompt
when yesil 1 has 3 points spawn endlessbg3 at the y axis of endlessbg3 spawnpoint,at the x location of the endlessbg3 spawn point every 16 seconds and make spawned endlessbg3 move left
User prompt
Please fix the bug: 'ReferenceError: endlessbg3SpawnInterval is not defined' in or related to this line: 'if (!endlessbg3SpawnInterval) {' Line Number: 648
User prompt
when yesil 1 has 3 points spawn endlessbg3 every 16 seconds and make spawned endlessbg3 move left
User prompt
when yesil 1 has 3 points spawn endlessbg3 every 16 seconds
User prompt
create a loop never make screen empty always spawn one endlessbg3 then background3 dont spawn every second only enough to make screen un empty
User prompt
make yesil_1 3 points when game starts
User prompt
spawn an endlessbg3 at the spawnpoint of endlessbg3 when background3 comes left of endlessbg3 spawn point
User prompt
Bu sorunu çözmek için oyun kodunuzda background spawn mekaniğini ve hareket mantığını yeniden düzenlememiz gerekiyor. İşte güncellenmiş kod çözümü: Arka Plan Spawn Mantığı (Game Code bölümünde): javascript // Endlessbg3 spawn if (subChild === endlessbg3 && subChild.x + subChild.width / 2 <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0, // Anchor'ı sola dayalı yap anchorY: 0.5 }); newBackground3.x = subChild.x + subChild.width; // Doğrudan sağına ekle newBackground3.y = subChild.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } // Background3 spawn if (subChild === background3 && subChild.x + subChild.width / 2 <= screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0, // Anchor'ı sola dayalı yap anchorY: 0.5 }); newEndlessbg3.x = subChild.x + subChild.width; // Doğrudan sağına ekle newEndlessbg3.y = subChild.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } Hareket Kontrol Mekaniği (Tube class'ında): javascript var Tube = Container.expand(function () { var self = Container.call(this); self.speed = 5; // Her iki arka plan için ortak hız self.update = function () { self.x -= self.speed; // Tüm arka planlar için aynı hız if (self.x < -self.width) { self.destroy(); } }; }); Yapılması Gereken Temel Değişiklikler: Anchor Ayarları: Asset'lerin anchor noktalarını sola dayalı yaparak (anchorX:0) pozisyon hesaplamalarını kolaylaştırın Pozisyon Hesaplama: newBackground3.x = subChild.x + subChild.width newEndlessbg3.x = subChild.x + subChild.width Ortak Hareket Hızı: Tüm arka plan objeleri için 5px/frame sabit hız Destroy Mantığı: Ekran dışına çıkan arka planları temizleme Çalışma Mantığı: endlessbg3 ekran ortasına (1024px) geldiğinde Sağına yeni background3 eklenir (x = endlessbg3.x + endlessbg3.width) background3 ekran ortasına geldiğinde Sağına yeni endlessbg3 eklenir (x = background3.x + background3.width) Her iki asset de aynı hızda (5px/frame) sola hareket eder Hata Önleme: javascript // Spawn öncesi çakışma kontrolü if (!bg3son.children.some(child => child.x < newBackground3.x + newBackground3.width && child.x + child.width > newBackground3.x )) { bg3son.addChild(newBackground3); } Bu değişikliklerle arka planlar sürekli ve sorunsuz bir şekilde birbirini takip edecek, kesintisiz bir döngü oluşturacaktır.
User prompt
Mevcut game.update fonksiyonunun yapısını koruduk Spawn mantığını game.update içine yerleştirdik bg3son'un alt nesnelerini (endlessbg3 ve background3) kontrol ediyoruz Spawn kontrolünü daha net ve güvenilir hale getirdik spawnedNext bayrağı ile tekrar spawn olmayı engelledik Ek olarak emin olmak için: endlessbg3 ve background3 nesnelerinin spawnedNext özelliği başlangıçta false olarak ayarlanmış olmalı Spawn mantığı oyunun her güncellemesinde kontrol edilecek Bu kodun spawn mekanizmasını çözmesini umuyorum. Eğer hala çalışmazsa, daha fazla detay verebilirseniz yardımcı olabilirim.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]; // Tube, yesil1, ve bg3son için update if (child instanceof Tube || child === yesil1 || child === bg3son) { child.update(); } // Alt nesnelerin update kontrolü if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; // Spawn mantığı if (child === bg3son && (subChild === endlessbg3 || subChild === background3) && !subChild.spawnedNext) { var screenCenter = 1024; // Endlessbg3 için spawn if (subChild === endlessbg3 && subChild.x + subChild.width / 2 <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = subChild.x + subChild.width + newBackground3.width / 2; newBackground3.y = subChild.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } // Background3 için spawn if (subChild === background3 && subChild.x + subChild.width / 2 <= screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = subChild.x + subChild.width + newEndlessbg3.width / 2; newEndlessbg3.y = subChild.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } } // Alt nesneler için update if (subChild.update) { subChild.update(); } } } } };
User prompt
Yaptığım önemli değişiklikler: Spawn kontrolünü daha net hale getirdim Ekranın ortasını belirlemek için nesnenin yarısını baz aldım Yeni arka plan nesnelerinin konumunu daha doğru hesapladım spawnedNext bayrağı ile tekrar spawn olmayı engelledim Ek olarak, bu kodun düzgün çalışması için şunları kontrol edin: endlessbg3 ve background3 nesnelerinin spawnedNext özelliği başlangıçta false olarak ayarlanmış olmalı Spawn mantığı bg3son.update içinde çalışıyor Umarım bu sefer istediğiniz sonucu alırsınız. Eğer hala çalışmazsa, daha fazla detay verebilirseniz yardımcı olabilirim.bg3son.update = function () { this.x -= 2; // Global movement speed is maintained var screenCenter = 1024; // Endlessbg3 spawn kontrolü if (!endlessbg3.spawnedNext) { if (endlessbg3.x + endlessbg3.width / 2 <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = endlessbg3.x + endlessbg3.width + newBackground3.width / 2; newBackground3.y = endlessbg3.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } } // Background3 spawn kontrolü if (!background3.spawnedNext) { if (background3.x + background3.width / 2 <= screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = background3.x + background3.width + newEndlessbg3.width / 2; newEndlessbg3.y = background3.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } } };
User prompt
Önemli değişiklikler: lastX kontrolünü kaldırdım Spawn kontrolünü basitleştirdim Yeni arka plan nesnelerinin konumunu daha net hesapladım x <= screenCenter kontrolü ile spawn işlemini tetikledim Bu yaklaşımda: Her arka plan nesnesi ekranın ortasına geldiğinde yanına yeni bir nesne spawn edilecek spawnedNext bayrağı ile tekrar spawn olmayı engelliyoruz Spawn edilen yeni nesneler aynı hızda sola hareket edecek bg3son.update = function () { this.x -= 2; // Global movement speed is maintained var screenCenter = 1024; // Endlessbg3 için spawn kontrolü if (!endlessbg3.spawnedNext && endlessbg3.x <= screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = endlessbg3.x + endlessbg3.width + newEndlessbg3.width / 2; newEndlessbg3.y = endlessbg3.y; bg3son.addChild(newEndlessbg3); endlessbg3.spawnedNext = true; } // Background3 için spawn kontrolü if (!background3.spawnedNext && background3.x <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = background3.x + background3.width + newBackground3.width / 2; newBackground3.y = background3.y; bg3son.addChild(newBackground3); background3.spawnedNext = true; } };
User prompt
Bu kodda yaptığım değişiklikler: lastX kontrolünü daha net hale getirdim. spawnedNext bayrağını ekledim ki aynı nesne için birden fazla spawn olmasın. Spawn kontrollerini daha net ve güvenilir hale getirdim. Her iki background için de benzer mantık uyguladım. Kodun çalışması için şunlara dikkat edin: endlessbg3 ve background3 nesnelerinin lastX özelliği başlangıçta tanımlanmalı spawnedNext bayrağı kullanarak tekrar spawn olmayı engelliyoruz Bu yaklaşım, ekranın ortasına geldiğinde yeni background nesnelerinin spawn olmasını sağlayacaktır bg3son.update = function () { this.x -= 2; // Global movement speed is maintained var screenCenter = 1024; // Endlessbg3 için spawn kontrolü if (endlessbg3.lastX === undefined) { endlessbg3.lastX = endlessbg3.x; } if (!endlessbg3.spawnedNext && endlessbg3.lastX <= screenCenter && endlessbg3.x > screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = endlessbg3.x + endlessbg3.width / 2 + newEndlessbg3.width / 2; newEndlessbg3.y = endlessbg3.y; bg3son.addChild(newEndlessbg3); endlessbg3.spawnedNext = true; } // Background3 için spawn kontrolü if (background3.lastX === undefined) { background3.lastX = background3.x; } if (!background3.spawnedNext && background3.lastX <= screenCenter && background3.x > screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = background3.x + background3.width / 2 + newBackground3.width / 2; newBackground3.y = background3.y; bg3son.addChild(newBackground3); background3.spawnedNext = true; } // lastX güncelleme endlessbg3.lastX = endlessbg3.x; background3.lastX = background3.x; };
User prompt
Spawn işlemi gerçekleşiyor gibi görünüyor ancak bg3son container'ının update fonksiyonu düzgün çalışmıyor olabilir. Bunun nedeni şunlar olabilir: Update Zinciri: Oyun döngüsünde (game.update) bg3son.update çağrılıyor mu? Eğer bg3son, ana game.update içinde güncellenmiyorsa, spawnlanan nesneler ekranda sabit kalır. Update Fonksiyonunun Doğru Tanımlanması: bg3son.update fonksiyonunuzun, container'in x koordinatını sola doğru azaltarak çalıştığından emin olun. Başka bir kod parçası bg3son.x değerini yeniden ayarlıyorsa, bu hareketi engelleyebilir. Sahneye Eklenme ve Z-Index: bg3son container'ı doğru bir şekilde sahneye eklenmiş mi? Eğer eklenmişse, update fonksiyonunun çağrıldığından emin olmak için console.log ile bg3son.x değerini izleyebilirsiniz. Önerim: Öncelikle, bg3son.update fonksiyonuna bir console.log ekleyerek her frame'de çağrılıp çağrılmadığını kontrol edin. Ardından, game.update fonksiyonunuzda bg3son.update çağrısının yapıldığından emin olun. Örneğin: js Kopyala Düzenle bg3son.update = function () { this.x -= 2; console.log("bg3son.x =", this.x); // Güncelleme çalışıyor mu kontrol edin // Alt nesneler için spawn kontrolleri vs. }; Bu şekilde, bg3son'un sola doğru hareket edip etmediğini takip edebilir ve eğer güncelleme yapılmıyorsa, update zincirinde bir eksiklik veya başka bir kodun müdahalesi olup olmadığını anlayabilirsiniz. Eğer update çağrısı gerçekleşiyor fakat nesneler hala hareket etmiyorsa, muhtemelen başka bir kod parçası bg3son'un konumunu sabit tutuyor olabilir. Bu durumda, bg3son'un konumunu etkileyen diğer update fonksiyonlarını gözden geçirmenizi öneririm.
User prompt
22 saniye hakkında Akıl yürütüldü Aşağıdaki örnekte, bg3son container’ının update fonksiyonuna eklenen bir kontrol ile (global konum hesaplaması yaparak) child olarak eklenen endlessbg3 ve background3 nesneleri ekranın ortasına (1024 piksel) yaklaştığında otomatik olarak karşı tarafına yeni bir arka plan (diğer tip) ekleyecek şekilde düzenledim. Böylece, bir nesnenin merkezi ekranın ortasına yaklaştığında diğer türden yeni bir nesne spawnlanıp bg3son’un sağ tarafına ekleniyor ve hepsi birlikte sola doğru hareket ediyor. Aşağıdaki kodu fade efektinin bg3son ekleme kısmına (örneğin fade-out tamamlandıktan sonra) ekleyin: js Kopyala Düzenle // bg3son'u oluşturuyoruz ve sahneye ekliyoruz: var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // İlk endlessbg3 ve background3'u ekliyoruz: var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Konumu: bg3son’un local koordinat sisteminde sağa kaydırılmış endlessbg3.x = (bg3son.width / 2) + (endlessbg3.width / 2) - 150; endlessbg3.y = 0; bg3son.addChild(endlessbg3); var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; // background3'ü endlessbg3'ün hemen sağına yerleştiriyoruz: background3.x = endlessbg3.x + (endlessbg3.width / 2) + (background3.width / 2); background3.y = endlessbg3.y; bg3son.addChild(background3); // Ekleme spawnları bir kere olsun diye flag ekliyoruz (her nesne spawnlanınca flag ayarlanır): function resetSpawnFlag(child) { // Eğer child belirli bir süre sonra spawnlanabilir hale gelsin istiyorsanız flag'i sıfırlayabilirsiniz. child.spawnedNext = false; } // bg3son'un update fonksiyonuna ekliyoruz: // (Ekran merkezini 1024 piksel olarak kabul ediyoruz) bg3son.update = function () { // bg3son container'ını sola hareket ettiriyoruz (global hareket hızı korunuyor) this.x -= 2; var screenCenter = 1024; // Tüm bg3son child'larını kontrol ediyoruz: for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; // global x hesaplamak: bg3son.x + child.x var globalX = this.x + child.x; // Eğer child'in merkezi ekranın soluna (1024) geçtiyse ve henüz spawnlanmadıysa: if (!child.spawnedNext && globalX < screenCenter) { // endlessbg3 ise, spawnlanacak yeni background3: if (child.asset && child.asset.name === 'endlessbg3') { var newBG3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBG3.zIndex = 2102; // Yeni background3'ün local x konumunu, child'in sağ kenarına göre ayarlıyoruz: newBG3.x = child.x + (child.width / 2) + (newBG3.width / 2); newBG3.y = child.y; this.addChild(newBG3); child.spawnedNext = true; // İsteğe bağlı, spawn flag'i belli süre sonra sıfırlayabilirsiniz: LK.setTimeout(function () { resetSpawnFlag(child); }, 1000); } // background3 ise, spawnlanacak yeni endlessbg3: else if (child.asset && child.asset.name === 'background3') { var newEndless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndless.zIndex = 2101; newEndless.x = child.x + (child.width / 2) + (newEndless.width / 2); newEndless.y = child.y; this.addChild(newEndless); child.spawnedNext = true; LK.setTimeout(function () { resetSpawnFlag(child); }, 1000); } } } }; Nasıl Çalışır: Başlangıç Ayarları: bg3son global container’ı sahneye ekleniyor. İlk endlessbg3, bg3son’un sağ tarafına yerleştiriliyor (local koordinat hesaplaması ile). background3, endlessbg3’ün hemen sağına ekleniyor. Update Fonksiyonu: bg3son sola hareket ederken, onun altındaki her child için global x hesaplanıyor. Eğer child’in global merkezi (bg3son.x + child.x) ekranın ortasına (1024 piksel) ulaşırsa (yani sol tarafa geçerse) ve henüz yeni bir spawn yapılmadıysa, child’in türüne göre karşı taraftan yeni bir arka plan (diğer tip) spawnlanıyor. Yeni eklenen nesneler de bg3son’un child’ı olduğundan, bg3son sola hareket ettikçe onlarla birlikte hareket edecekler. Flag Kontrolü: Her child spawnlandığında child.spawnedNext = true olarak işaretleniyor ve 1 saniyelik bir zaman aşımından sonra tekrar spawnlanabilir hale getiriliyor. Bu yapı sayesinde, endlessbg3 ekranın ortasına geldiğinde onun sağ tarafına background3 spawnlanacak; background3 ekranın ortasına geldiğinde de onun sağ tarafına yeni endlessbg3 spawnlanacaktır. Her şey aynı bg3son container içinde, dolayısıyla sola hareket hızı sabit kalacaktır. Not: Spawnlamaların tam zamanlaması ve konumları, asset’lerinizin boyutlarına ve oyununuzun diğer dinamiklerine bağlı olarak ayarlanabilir. Eğer hâlâ hız veya konum problemi yaşanıyorsa, bg3son.update içindeki “2” değerini veya konum hesaplamalarını ihtiyaçlarınıza göre ayarlayabilirsiniz.
/**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 5; self.zIndex = 15; self.update = function () { self.x -= self.velocity; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // FlyinEnemy class var FlyinEnemy = Container.expand(function () { var self = Container.call(this); var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.homing = false; self.vx = 0; self.vy = 0; self.update = function () { if (!self.homing) { self.x -= self.speed; if (self.x < -50) { self.destroy(); } } else { self.x += self.vx; self.y += self.vy; if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.fallSpeed = 0; self.fallAcceleration = 0.7; self.fallTargetY = 2732 / 2 - 7; self.zIndex = 20; self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3; self.update = function () { self.prevY = self.y; if (self.isFalling) { self.y += self.fallSpeed; self.fallSpeed += self.fallAcceleration; if (self.y >= self.fallTargetY) { self.y = self.fallTargetY; self.isFalling = false; self.fallSpeed = 0; game.weaponEnabled = true; } } self.prevY = self.y; if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; if (self.y >= 2732 / 2 - 3) { self.y = 2732 / 2 - 9; self.isJumping = false; self.velocityY = 0; } } }; self.invulnerable = false; self.hit = function () { if (!self.invulnerable) { self.loseHeart(); self.invulnerable = true; LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; self.loseHeart = function () { self.hearts--; playerDeaths++; if (playerDeaths === 1 && hearts[0]) { hearts[0].destroy(); } else if (playerDeaths === 2 && hearts[1]) { hearts[1].destroy(); } else if (playerDeaths === 3 && hearts[2]) { hearts[2].destroy(); } remainingHearts = self.hearts; if (hearts.length === 0) { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; } }; }); // ScrollingBackground class var ScrollingBackground = Container.expand(function () { var self = Container.call(this); self.bg1 = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); self.bg1.x = 0; self.bg1.y = 0; self.addChild(self.bg1); self.bg2 = LK.getAsset('background', { anchorX: 1, anchorY: 0 }); self.bg2.scaleX = -1; self.bg2.x = self.bg1.width; self.bg2.y = 0; self.addChild(self.bg2); self.speed = 2; self.update = function () { self.bg1.x -= self.speed; self.bg2.x -= self.speed; if (self.bg1.x + self.bg1.width <= 0) { self.bg1.x = self.bg2.x + self.bg2.width; } if (self.bg2.x + self.bg2.width <= 0) { self.bg2.x = self.bg1.x + self.bg1.width; } }; }); // ScrollingBackground2 class var ScrollingBackground2 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('background2', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('background2', { anchorX: 1, anchorY: 0 }); bg2.scaleX = -1; bg2.x = bg1.width; bg2.y = 0; self.addChild(bg2); self.speed = 2; self.update = function () { bg1.x -= self.speed; bg2.x -= self.speed; if (bg1.x + bg1.width <= 0) { bg1.x = bg2.x + bg2.width; } if (bg2.x + bg2.width <= 0) { bg2.x = bg1.x + bg1.width; } }; }); // Tube class var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Common speed for all backgrounds self.zIndex = 0; self.update = function () { self.x -= self.speed; // Move left at common speed if (self.x < -self.width) { // Destroy when off-screen self.destroy(); } }; }); // Tube2 class var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Game Code ****/ var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); /**** * Global Variables & Flags ****/ var startNormalEnemy = true; var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; game.controlActive = false; var coins = []; var firstControlTriggered = false; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; /**** * (A) Eski FlyinEnemy Spawn (sağdan sola, homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) { return; } var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) { return; } var fe = new FlyinEnemy(); fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [{ x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 }]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy) || 1; enemy.vx = dx / distance * enemy.speed; enemy.vy = dy / distance * enemy.speed; enemy.zIndex = 2100; if (enemy.x < 1024) { enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); }, 10000); } }); } /**** * Normal Enemy Spawn (sağdan sola, homing false) ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube || child === yesil1 || child === bg3son) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; // Spawn logic for endlessbg3 and background3 if (child === bg3son && (subChild === endlessbg3 || subChild === background3) && !subChild.spawnedNext) { var screenCenter = 1024; // Endlessbg3 spawn if (subChild === endlessbg3 && subChild.x + subChild.width / 2 <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = subChild.x + subChild.width; newBackground3.y = subChild.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } // Background3 spawn if (subChild === background3 && subChild.x + subChild.width / 2 <= screenCenter) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = subChild.x + subChild.width; newEndlessbg3.y = subChild.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } } if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // --- Enemy - Player --- for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin Toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; LK.stage.addChild(game); /**** * Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) { return; } var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var yesil1 = LK.getAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); yesil1.x = tube.x; yesil1.y = tube.y - 170; yesil1.speed = 10; yesil1.points = 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"); // Freeze condition and trigger fade effect if (yesil1.points >= 3) { console.log("Freeze game triggered because yesil1 points reached: " + yesil1.points); stopSpawn = true; // Spawn endlessbg3 at its normal spawn point var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = 2048 + newEndlessbg3.width / 2; // Normal spawn point newEndlessbg3.y = 2732 / 2; // Align vertically newEndlessbg3.update = function () { this.x -= 2; // Move to the left }; game.addChild(newEndlessbg3); // Create other endlessbg3s every 10 seconds LK.setInterval(function () { if (yesil1.points >= 3) { var additionalEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); additionalEndlessbg3.zIndex = 2101; additionalEndlessbg3.x = 2048 + additionalEndlessbg3.width / 2; // Normal spawn point additionalEndlessbg3.y = 2732 / 2 + 150; // Move 150 pixels down additionalEndlessbg3.update = function () { this.x -= 2; // Move to the left }; game.addChild(additionalEndlessbg3); } }, 10000); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // Unfreeze and restore velocity of background2 and tube_1 after 5 seconds LK.setTimeout(function () { for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj instanceof ScrollingBackground2 || obj instanceof Tube) { obj.update = function () { this.x -= this.speed; if (this.x < -this.width) { this.destroy(); } }; } } }, 5000); // Add 'kara' asset to the center of the screen with a high zIndex so that it covers the characters var kara = LK.getAsset('kara', { anchorX: 0.5, anchorY: 0.5 }); kara.x = 2048 / 2; kara.y = 2732 / 2; kara.alpha = 0; kara.zIndex = 10000; // Ensures kara is drawn in front game.addChild(kara); // Fade in 'kara' asset over 0.5 seconds var fadeInSteps = 30; var fadeInStepTime = 500 / fadeInSteps; var fadeInStep = 0; var fadeInInterval = LK.setInterval(function () { if (fadeInStep < fadeInSteps) { kara.alpha = fadeInStep / fadeInSteps; fadeInStep++; } else { LK.clearInterval(fadeInInterval); // Fade out 'kara' asset over 0.5 seconds var fadeOutSteps = 30; var fadeOutStepTime = 500 / fadeOutSteps; var fadeOutStep = 0; var fadeOutInterval = LK.setInterval(function () { if (fadeOutStep < fadeOutSteps) { kara.alpha = 1 - fadeOutStep / fadeOutSteps; fadeOutStep++; } else { LK.clearInterval(fadeOutInterval); kara.destroy(); } // Add bg3son to the game var bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); bg3son.zIndex = 2100; // Explicitly set zIndex for bg3son bg3son.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // Add endlessbg3 as a child of bg3son var endlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endlessbg3.zIndex = 2101; // Explicitly set zIndex for endlessbg3 endlessbg3.x = bg3son.width / 2 + endlessbg3.width / 2 - 150; endlessbg3.y = 0; // Align with bg3son endlessbg3.spawnedNext = false; bg3son.addChild(endlessbg3); // Add background3 as a child of bg3son var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.zIndex = 2102; // Explicitly set zIndex for background3 background3.x = endlessbg3.x + endlessbg3.width / 2 + background3.width / 2; background3.y = endlessbg3.y; // Align with endlessbg3 background3.spawnedNext = false; bg3son.addChild(background3); // Keep bg3son stationary for 15 seconds, then move it left LK.setTimeout(function () { bg3son.update = function () { this.x -= 2; // Global movement speed is maintained var screenCenter = 1024; // Endlessbg3 spawn control if (!endlessbg3.spawnedNext) { if (endlessbg3.x + endlessbg3.width / 2 <= screenCenter) { var newBackground3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); newBackground3.zIndex = 2102; newBackground3.x = endlessbg3.x + endlessbg3.width + newBackground3.width / 2; newBackground3.y = endlessbg3.y; bg3son.addChild(newBackground3); endlessbg3.spawnedNext = true; } } // Background3 spawn control if (!background3.spawnedNext) { if (background3.x <= endlessbg3.x) { var newEndlessbg3 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newEndlessbg3.zIndex = 2101; newEndlessbg3.x = endlessbg3.x + endlessbg3.width; newEndlessbg3.y = endlessbg3.y; bg3son.addChild(newEndlessbg3); background3.spawnedNext = true; } } }; }, 15000); }, fadeOutStepTime); } }, fadeInStepTime); LK.setTimeout(function () { player.destroy(); function destroyAndRemove(objects) { for (var i = objects.length - 1; i >= 0; i--) { objects[i].destroy(); objects.splice(i, 1); } } destroyAndRemove(enemies); destroyAndRemove(flyinEnemies); destroyAndRemove(coins); // Destroy background and tube_1 for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 500); if (!game.isFading) { console.log("Triggering fade effect because yesil1 is active with points: " + yesil1.points); enhancedFadeEffect(); } } }; game.addChild(yesil1); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { var toggleSpawn = function toggleSpawn(state, delay) { stopSpawn = state; if (!state) { LK.setTimeout(function () { stopSpawn = false; }, delay); } }; game.controlActive = true; control.update = function () {}; console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; coins.forEach(function (coin) { coin.velocity = 0; }); LK.setTimeout(function () { coins.forEach(function (coin) { coin.velocity = 5; }); }, 4000); toggleSpawn(true, 5000); game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); /**** * Arka Plan ve Oyuncu ****/ var scrollingBackground = new ScrollingBackground(); game.addChild(scrollingBackground); var player = game.addChild(new Player()); player.x = 2048 / 2 - 30; player.y = 2732 / 2 + 3; /**** * Skor GUI ve Kalp ****/ var counterBackground = LK.getAsset('counter_background', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(counterBackground); counterBackground.x = LK.gui.top.width / 2 - 62; counterBackground.y = 45; var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 85; scoreText.y = 0; for (var i = 0; i < 3; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(heart); heart.x = 50 + i * 110 + 390; heart.y = 50; hearts.push(heart); } /**** * enhancedFadeEffect: Fade-out, clear scene, spawn background2, Tube2, then new player ****/ function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) { return; } game.isFading = true; game.fadeTriggered = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; // Ensure overlay stays on top overlay.zIndex = 10000; if (!overlay.parent) { LK.stage.addChild(overlay); } var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; stopSpawn = true; while (game.children.length > 0) { game.removeChild(game.children[0]); } var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); var tube2 = new Tube2(); control_2.x = 0; control_2.y = -177.5; tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); LK.setTimeout(function () { var newPlayer = new Player(); newPlayer.hearts = remainingHearts; newPlayer.x = 2048 / 2 - 30; newPlayer.y = tube2.y; newPlayer.isFalling = true; newPlayer.fallSpeed = 0; newPlayer.fallAcceleration = 0.7; newPlayer.fallTargetY = 2732 / 2 - 7; game.addChild(newPlayer); player = newPlayer; game.weaponEnabled = true; LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); LK.setTimeout(function () { startNormalEnemy = true; }, 10500); }, 500); var fadeInDuration = 500; var fadeInStepTime = fadeInDuration / steps; var fadeInInterval = LK.setInterval(function () { if (currentStep < steps) { if (game.scrollingBg2) { game.scrollingBg2.alpha = currentStep / steps; } currentStep++; } else { LK.clearInterval(fadeInInterval); if (overlay.parent) { overlay.parent.removeChild(overlay); } var oldScrollingSpeed = game.scrollingBg2.speed; var oldTubeSpeed = tube2.speed; game.scrollingBg2.speed = 0; tube2.speed = 0; LK.setTimeout(function () { game.scrollingBg2.speed = oldScrollingSpeed; tube2.speed = oldTubeSpeed; stopSpawn = false; game.isFading = false; game.fadeCompleted = true; }, 8000); } }, fadeInStepTime); } }, stepTime); } /**** * Oyun Döngüsü ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // Çarpışma Kontrolleri for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; LK.stage.addChild(game); // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game);
===================================================================
--- original.js
+++ change.js
@@ -635,9 +635,9 @@
anchorY: 0.5
});
additionalEndlessbg3.zIndex = 2101;
additionalEndlessbg3.x = 2048 + additionalEndlessbg3.width / 2; // Normal spawn point
- additionalEndlessbg3.y = 2732 / 2; // Align vertically
+ additionalEndlessbg3.y = 2732 / 2 + 150; // Move 150 pixels down
additionalEndlessbg3.update = function () {
this.x -= 2; // Move to the left
};
game.addChild(additionalEndlessbg3);
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