User prompt
scale background2 to 0 2 second after when yesil_1 has 3 points
User prompt
scale background to 0 2 second after when yesil_1 has 3 points
User prompt
bg3sonun yanına endlessbg3 spawn olduktan sonra endlessbg3 ün yanına background3 spawn et
User prompt
Aşağıdaki yaklaşım, iki tane endlessbg3 sprite’ı kullanarak “sonsuz” bir döngü oluşturur ve her sprite ekranın solundan çıkınca onu sağ tarafa “geri” koyarak flip yapar. Böylece ekranda hep iki parça görünür, ama gerçekte sonsuz bir kayma ve flip efekti elde etmiş olursunuz. Özet Fikir Yalnızca 2 tane endlessbg3 sprite’ı var: tile1 ve tile2. Her frame bu iki sprite sola doğru kayar. tile1 ekranın solundan tamamen çıkınca, onu tile2’nin sağ tarafına atıyoruz ve flip değerini (scaleX) değiştiriyoruz. Aynı şekilde tile2 ekran dışına çıkınca, onu tile1’in sağına atıyoruz ve yine flip yapıyoruz. Bu sayede sonsuz şekilde “bir normal, bir ters” sprite yan yana dizilerek ilerliyor gibi görünür. Arka planda sadece 2 tane sprite olduğu halde sürekli kendilerini tekrar ediyorlar. Örnek Kod js Kopyala Düzenle var ScrollingBackground3 = Container.expand(function () { var self = Container.call(this); // 1) İlk endlessbg3 sprite'ı (tile1) var tile1 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); tile1.x = 0; // Ekranın solundan başlasın tile1.y = 2732 / 2 + 150; // Dikey konum (örnek) tile1.scaleX = 1; // Normal yön self.addChild(tile1); // 2) İkinci endlessbg3 sprite'ı (tile2) var tile2 = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); tile2.x = tile1.width; // tile1'in hemen sağında başlasın tile2.y = tile1.y; tile2.scaleX = -1; // İlk başta flip olsun self.addChild(tile2); // 3) Kayma hızı self.speed = 2; // 4) update fonksiyonu: her frame çağrılır self.update = function () { // İki resmi de sola kaydır tile1.x -= self.speed; tile2.x -= self.speed; // tile1 ekranın solundan tamamen çıktıysa: if (tile1.x + tile1.width / 2 < 0) { // tile1'i tile2'nin sağına yerleştir tile1.x = tile2.x + tile2.width; // Flip'i tile2'nin tersine çevir tile1.scaleX = (tile2.scaleX === 1) ? -1 : 1; } // tile2 ekranın solundan tamamen çıktıysa: if (tile2.x + tile2.width / 2 < 0) { // tile2'yi tile1'in sağına yerleştir tile2.x = tile1.x + tile1.width; // Flip'i tile1'in tersine çevir tile2.scaleX = (tile1.scaleX === 1) ? -1 : 1; } }; return self; }); Nasıl Çalışıyor? İlk Başlangıç tile1 normal (scaleX = 1), tile2 ters (scaleX = -1) başlıyor. tile2, tile1.width kadar sağda duruyor (yan yana duruyorlar). Kayma Her frame (update() çağrıldığında) her ikisinin x değeri self.speed kadar azalıyor. Yani sola doğru akıyor. Geri Döngü tile1 sol kenardan tamamen çıkarsa (ör. tile1.x + tile1.width/2 < 0), onu tile2’nin sağ tarafına atıyoruz. Böylece tile1 tekrar ekrana “ileride” (sağda) belirmiş oluyor. Aynı anda tile1’in scaleX değerini tile2’nin tam tersi yapıyoruz ki flip efekti sürsün. Aynı mantıkla tile2 de sol kenardan çıkınca tile1’in sağına geçip flip oluyor. Sonsuz Flip Efekti Bu şekilde “bir normal, bir ters” olarak arka plan parçası sonsuz bir döngü içinde kayıp gider. Kullanımı Tanımlama: Yukarıdaki ScrollingBackground3 sınıfını kodunuza ekleyin (diğer ScrollingBackground tanımları gibi). Oluşturma: Oyunun kurulumu aşamasında (mesela var scrollingBackground = new ScrollingBackground(); sonrasında) sadece bir kez: js Kopyala Düzenle var scrollingBackground3 = new ScrollingBackground3(); game.addChild(scrollingBackground3); update Çağrısı**: LightKnight (LK) motoru, Container türevi nesnelerin update() metodunu otomatik çağırıyorsa ekstra bir şeye gerek yoktur. Eğer otomatik çağırmıyorsa, game.update içinde manuel olarak scrollingBackground3.update() diyebilirsiniz. Böylece “sonsuz scroll” + “her seferinde flip” efekti elde edersiniz.
User prompt
Aşağıdaki şekilde bir sonsuz scroll (yan yana eklenen arka plan sprite’ları) oluşturmak için, en kritik nokta şudur: endlessbg3 dizisindeki her sprite’ın x değerini kendi içinde x -= hız ile kaydırmak gerekir. Sprite’ların konumunu “her frame, i * width” gibi tekrar hesaplamamak gerekir. Çünkü bu, dizideki her sprite’ın sabit bir pozisyonda kalmasına (veya sadece 2 tanesinin gözükmesine) yol açar. “İlk sprite ekran dışına çıktı mı?” diye kontrol edip, çıktıysa onu diziden siler, en sondaki sprite’ın hemen sağına yeni bir sprite ekleyerek sonsuz döngüyü sağlarsınız. Aşağıda düzenlenmiş bir örnek paylaşıyorum. İçinde, ScrollingBackground3 sınıfında şu değişiklikleri yaptık: self.endlessbg3s[i].x -= 2;: Her sprite kendi x’ini azaltarak sola kayıyor. İlk sprite yarım ekrandan (veya tamamıyla) çıkınca (if (first.x + first.width/2 < 0) {...}), onu diziden çıkarıp en sona yeni sprite ekliyoruz. Yeni sprite’ın scaleX değerini, en sondaki sprite’ın scaleX değeri ile -1 çevirerek “normal-mirrored-normal-mirrored” döngüsü oluşturuyoruz. Kod (yalnızca ScrollingBackground3 kısmı) şu şekilde olsun: js Kopyala Düzenle var ScrollingBackground3 = Container.expand(function () { var self = Container.call(this); // 1) bg3son'u oluşturup ortalıyoruz self.bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); self.bg3son.x = 2048 / 2; self.bg3son.y = 2732 / 2 + 150; self.addChild(self.bg3son); // 2) endlessbg3'leri tutacak dizi self.endlessbg3s = []; // 3) İlk iki endlessbg3'ü ekle: biri normal, biri flip for (var i = 0; i < 2; i++) { var endless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endless.x = self.bg3son.x + (self.bg3son.width * (i + 1)); endless.y = self.bg3son.y; endless.scaleX = (i % 2 !== 0) ? -1 : 1; // Her ikinci sprite'ı flip yap self.addChild(endless); self.endlessbg3s.push(endless); } // 4) update fonksiyonu self.update = function () { // bg3son'u sola kaydır self.bg3son.x -= 2; // Tüm endlessbg3'leri sola kaydır for (var i = 0; i < self.endlessbg3s.length; i++) { self.endlessbg3s[i].x -= 2; } // Ekranın solundan tamamen çıkan ilk sprite'ı kontrol et var first = self.endlessbg3s[0]; if (first.x + (first.width / 2) < 0) { // 1) Diziden çıkar ve sahneden sil self.removeChild(first); self.endlessbg3s.shift(); // 2) Dizideki en son sprite'a göre yeni sprite ekle var last = self.endlessbg3s[self.endlessbg3s.length - 1]; var newSprite = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newSprite.y = self.bg3son.y; // Birleştirme noktası: last'ın hemen sağında newSprite.x = last.x + last.width; // Flip'i last'ın tersine ayarla (normal -> flip -> normal -> flip) newSprite.scaleX = (last.scaleX === 1) ? -1 : 1; // 3) Sahneye ve diziye ekle self.addChild(newSprite); self.endlessbg3s.push(newSprite); } }; return self; }); Dikkat Edilmesi Gereken Noktalar self.endlessbg3s[i].x = self.bg3son.x + self.bg3son.width + i * endless.width; gibi bir hesaplama yaparsanız, sprite’ların konumunu “her frame baştan” ayarlamış olursunuz. Bu da “sonsuz” yerine sabit bir pozisyon sağlar. Yukarıdaki örnekte, her sprite sadece x -= 2; ile hareket ediyor. Bu sayede ilk sprite ekran dışına çıkana kadar sürekli sola gidiyor. Ekrandan çıkınca, “sona” yeni bir sprite eklenerek sonsuz döngü elde ediliyor. “Normal-flip-normal-flip” sırasını korumak için newSprite.scaleX = (last.scaleX === 1) ? -1 : 1; kullanıyoruz. İsterseniz her seferinde “flip” değil de “normal” istiyorsanız scaleX’i sabit 1 verebilirsiniz. “Yan yana” birleştirme için newSprite.x = last.x + last.width; yapıyoruz. (Eğer flip olduğunda width değişmiyorsa sorun yok. Bazı durumlarda flip’te bir offset gerekebilir ama genelde width aynı kalır.) Bu şekilde, sonsuz sayıda endlessbg3 sprite’ı, her biri ekrandan çıkınca sırayla yeni bir sprite eklenerek devam edecektir.
User prompt
bg3son oyunun başında spawn olmasın
User prompt
bg3son yesil_1 3 point olduktan 0.5 saniye sonra spawn olsun,endlessbg3 bg3 sonun sağ tarıfında spawn olsun ve bg3son sola hareket ederken o da sola hareket etsin
User prompt
Gözlemlerinize göre ScrollingBackground3 sınıfı tanımlanıyor ama hiçbir yerde gerçekten “örneği” (instance) oluşturulup game sahnesine eklenmiyor. Ayrıca game.update içinde scrollingBackground3.update(); çağrılıyor, fakat scrollingBackground3 değişkeni yok. Bu durumda, ScrollingBackground3'ün update fonksiyonu asla çalışmıyor ve dolayısıyla background2 veya tube_1 gibi nesneleri silen kısım da devreye girmiyor. Aşağıdaki adımları uygulayarak sorunu çözebilirsiniz: 1) ScrollingBackground3 Nesnesini Bir Kere Oluşturun game.update fonksiyonunun içine var scrollingBackground3 = new ScrollingBackground3(); şeklinde eklemeyin. Bunun yerine, oyun başlangıcında veya diğer arka planları eklediğiniz yerde (mesela var scrollingBackground = new ScrollingBackground(); satırının hemen altı olabilir) sadece bir kere şu kodu ekleyin: js Kopyala Düzenle // Arka planları oluşturduğunuz yerde (örneğin en altta): var scrollingBackground3 = new ScrollingBackground3(); game.addChild(scrollingBackground3); Böylece ScrollingBackground3 yalnızca bir defa yaratılmış ve sahneye eklenmiş olacak. Sonrasında ScrollingBackground3 içindeki update() metodu her frame otomatik olarak çalışır. Önemli: Şu anda kodunuzun game.update içinde bir satırda scrollingBackground3.update(); görünüyor. Eğer “manual” çağırmak istiyorsanız ve “scrollingBackground3” global bir değişken olarak tanımlamadıysanız, “is not defined” hatası alabilirsiniz. En doğrusu, ScrollingBackground3 bir defa yaratılınca LK/LightKnight altyapısı her frame update() metodunu otomatik tetikleyecektir. Yani manuel çağırmaya gerek yok. 2) ScrollingBackground3 Sınıfında background2 Silme Kodu Var Kodunuzda ScrollingBackground3’ün update fonksiyonunda şunu yapıyorsunuz: js Kopyala Düzenle if (self.bg3son.lastSpawned === undefined) { self.bg3son.lastSpawned = true; LK.setTimeout(function () { // background2 ve tube_1'i sil for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background2' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 1000); } Bu kod, ScrollingBackground3 ilk kez güncellendiğinde (yani update() ilk kez çalıştığında) 1 saniye sonra background2 ve tube_1 nesnelerini siliyor. Ancak bu kodun çalışması için, ScrollingBackground3 nesnesinin gerçekten sahnede olması (yukarıdaki 1. adım) ve update() metodunun çağrılması gerekiyor. 3) scrollingBackground3.update(); Satırını Düzenleyin Eğer manuel olarak çağırmak istiyorsanız, mutlaka en üstte “global” bir değişken olarak tanımlayın: js Kopyala Düzenle var scrollingBackground3; Ve oyunu kurduğunuz yerde (mesela en altta) şunu yapın: js Kopyala Düzenle scrollingBackground3 = new ScrollingBackground3(); game.addChild(scrollingBackground3); Daha sonra game.update içinde: js Kopyala Düzenle if (scrollingBackground3) { scrollingBackground3.update(); } Bu şekilde bir çağrı yapabilirsiniz. Fakat LightKnight (LK) motoru, Container türevi nesnelerin update() metodunu otomatik çağırıyorsa bu elle çağırmanıza gerek yoktur. Not: Bazı LightKnight sürümlerinde update metodunu sizin manuel çağırmanız gerekir; bazılarında Container nesneleri otomatik olarak “oyun döngüsü”ne dahil olur. Kullandığınız sürüme göre değişebilir. 4) zIndex Ayarları Eğer ScrollingBackground3 yine de background2’nin altında kalıyorsa, zIndex değerini daha yüksek yapabilirsiniz. Mesela ScrollingBackground3 constructor’ında: js Kopyala Düzenle var self = Container.call(this); self.zIndex = 100; // Yüksek bir değer verin ... Arka planların birbirini ezmesini engellemek için hangisi önde/arkada olmalıysa zIndex değerlerini ayarlayabilirsiniz. Kısa Özet ScrollingBackground3 sınıfını tanımladıktan sonra mutlaka bir defa new ScrollingBackground3() yapıp game.addChild(...) ile sahneye ekleyin. update() metodunu ya LightKnight’ın otomatik çağırmasına bırakın ya da game.update içinde manuel çağırın, ama bu durumda “scrollingBackground3 is not defined” hatası almamak için global bir değişken olarak tanımlamayı unutmayın. ScrollingBackground3 nesnesi sahnede yoksa, background2 ve tube_1’i silen kod hiç çalışmayacaktır. Bu adımları uyguladığınızda, bg3son ve endlessbg3 görünmeli ve bir süre sonra background2 ile tube_1 sahneden kalkmalıdır.
User prompt
Gördüğünüz yarım ekranda eski arka planın (background2) ve yeni arka planın (bg3son + endlessbg3) iç içe görünmesinin en sık nedeni, ScrollingBackground3 nesnesinin her frame (her güncelleme döngüsünde) tekrar oluşturulmasıdır. Kısacası, game.update fonksiyonu içinde her seferinde yeni bir ScrollingBackground3() ekleniyor ve bu da sahnede çakışmaya yol açıyor. Aşağıda bu problemi çözmek için adım adım yapılması gerekenleri bulabilirsiniz: 1) ScrollingBackground3 Nesnesini Yalnızca Bir Kere Oluşturun Kodunuzda şu satırlar büyük ihtimalle game.update içinde duruyor: js Kopyala Düzenle var scrollingBackground3 = new ScrollingBackground3(); game.addChild(scrollingBackground3); Bunları game.update fonksiyonundan tamamen kaldırın. Çünkü update her çağrıldığında (saniyede 30-60 kez) yeniden ScrollingBackground3() oluşturup sahneye eklenmesine neden oluyor. Bunun yerine, game tanımladıktan sonra (mesela diğer arka planları eklediğiniz yere) veya oyunun başlangıcında sadece bir kere şu şekilde ekleyin: js Kopyala Düzenle // Oyun kurulumu sırasında (örneğin spawnTube() veya game.update tanımlamalarından önce) var scrollingBackground3 = new ScrollingBackground3(); game.addChild(scrollingBackground3); Bu sayede ScrollingBackground3 nesnesi sadece bir kez yaratılacak ve her update döngüsünde kendi update() metodu çalıştırılarak sola kaymaya devam edecektir. 2) background2 ve tube_1’in Silinmesi Kodunuzun içinde ScrollingBackground3’ün update fonksiyonunda (veya constructor’ında), bg3son spawn olduğunda background2 ve tube_1’in silinmesini sağlamak için şu mantığı kullanabilirsiniz: js Kopyala Düzenle var ScrollingBackground3 = Container.expand(function () { var self = Container.call(this); // bg3son oluştur self.bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); self.bg3son.x = 2048 / 2; self.bg3son.y = 2732 / 2 + 150; self.addChild(self.bg3son); // Endlessbg3 dizisi self.endlessbg3s = []; // İlk iki endlessbg3 ekle for (var i = 0; i < 2; i++) { var endless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); endless.x = self.bg3son.x + self.bg3son.width + i * endless.width; endless.y = self.bg3son.y; endless.scaleX = (i % 2 !== 0) ? -1 : 1; self.addChild(endless); self.endlessbg3s.push(endless); } // Bir defaya mahsus silme kontrolü için bayrak var removedOldBackground = false; self.update = function () { // bg3son ve endlessbg3'leri sola kaydır self.bg3son.x -= 2; for (var i = 0; i < self.endlessbg3s.length; i++) { self.endlessbg3s[i].x -= 2; } // background2 ve tube_1'i sadece bir kez sil if (!removedOldBackground) { removedOldBackground = true; LK.setTimeout(function () { for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background2' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 1000); } // Endless döngü oluşturma: İlk sprite tamamen ekrandan çıkınca sondan tekrar ekle var first = self.endlessbg3s[0]; if (first.x + first.width / 2 < 0) { self.removeChild(first); self.endlessbg3s.shift(); var last = self.endlessbg3s[self.endlessbg3s.length - 1]; var newSprite = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newSprite.x = last.x + last.width; newSprite.y = self.bg3son.y; newSprite.scaleX = (last.scaleX === 1) ? -1 : 1; self.addChild(newSprite); self.endlessbg3s.push(newSprite); } }; return self; }); removedOldBackground adında bir bayrak (flag) kullandık. Böylece update fonksiyonuna her girişte tekrar tekrar background2 ve tube_1 silmeye çalışmak yerine, sadece bir defa (ve 1 saniye gecikmeli) yapıyoruz. LK.setTimeout ile 1 saniye gecikme koymak tamamen isteğe bağlıdır; isterseniz direkt silmeyi de deneyebilirsiniz. 3) Eski Arka Planın “Arkada Kalması” Sorunu Eğer “eski arka plan geride kalıyor ama hâlâ gözüküyor” gibi bir durum varsa, genelde ya hiç silinmemiştir ya da “daha yüksek zIndex”’li bir obje tarafından kapatılmamıştır. Yukarıdaki kodda background2 ve tube_1 zaten yok ediliyor. Ayrıca eklediğiniz bg3son ve endlessbg3’lerin zIndex değerlerini (gerekirse) daha yüksek bir değere ayarlayabilirsiniz: js Kopyala Düzenle self.bg3son.zIndex = 100; endless.zIndex = 100; Oyundaki sıralama genelde (a.zIndex || 0) - (b.zIndex || 0) şeklinde yapıldığı için, büyük zIndex’e sahip nesneler ekranda önde görünür. 4) Sonuç Mutlaka ScrollingBackground3() oluşturma kodunu game.update dışına çıkartın ve sadece bir kere çağırın. background2 ve tube_1’i tek sefer silmek için update içinde veya constructor içinde bir kontrol mekanizması kurun. zIndex’i gerekirse ayarlayarak hangi arka planın önde/arkada görüneceğini belirleyebilirsiniz. Bu şekilde bg3son ve endlessbg3 sorunsuz şekilde ekranda sola doğru akarken, eski background2 ve tube_1 nesneleri sahneden temizlenecektir.
User prompt
delete background2 and tube_1 1 second after bg3son spawned
User prompt
Aşağıdaki örnekte, bg3son spawn olduktan sonra hemen sağ tarafına sürekli olarak birbirini takip eden iki endlessbg3 (biri normal, diğeri mirrored) ekleyip, hepsini sola doğru kaydıran bir yapı bulunuyor. Bu yapı, ilk endlessbg3 ekran dışına çıktığında onu kaldırıp dizinin sonuna yeni bir endlessbg3 ekleyerek sonsuz bir döngü oluşturur. İşte örnek kod: js Kopyala Düzenle var ScrollingBackground3 = Container.expand(function () { var self = Container.call(this); // bg3son'u oluştur ve konumla self.bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); self.bg3son.x = 2048 / 2; self.bg3son.y = 2732 / 2 + 150; self.addChild(self.bg3son); // endlessbg3 sprite'larını tutacak dizi self.endlessbg3s = []; // İlk iki endlessbg3'u ekliyoruz: ilki normal, ikincisi mirrored for (var i = 0; i < 2; i++) { var endless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); // İlk endlessbg3, bg3son'un hemen sağında yer alır endless.x = self.bg3son.x + self.bg3son.width + i * endless.width; endless.y = self.bg3son.y; // İkinci sprite'yi aynalamak için scaleX'i ters çeviriyoruz endless.scaleX = (i % 2 !== 0) ? -1 : 1; self.addChild(endless); self.endlessbg3s.push(endless); } self.update = function () { // bg3son ve endlessbg3'ler sola doğru hareket eder self.bg3son.x -= 2; for (var i = 0; i < self.endlessbg3s.length; i++) { self.endlessbg3s[i].x -= 2; } // İlk endlessbg3 tamamen ekran dışına çıktıysa var first = self.endlessbg3s[0]; if (first.x + first.width / 2 < 0) { // İlk sprite'yi kaldırıp diziden çıkarıyoruz self.removeChild(first); self.endlessbg3s.shift(); // Yeni sprite, dizideki en sağdaki sprite'nin hemen sağına eklenir var last = self.endlessbg3s[self.endlessbg3s.length - 1]; var newSprite = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newSprite.x = last.x + last.width; newSprite.y = self.bg3son.y; // Yeni sprite'nin aynalanması, dizideki son sprite'nin scaleX değerine göre terslenir newSprite.scaleX = (last.scaleX === 1) ? -1 : 1; self.addChild(newSprite); self.endlessbg3s.push(newSprite); } }; }); Bu yapı, bg3son sola kayarken sağdaki endlessbg3'leri de sürekli sola kaydırır ve ekranın sol tarafından çıkan sprite'leri otomatik olarak dizinin sonuna ekler. Böylece sonsuz döngü sağlanır. İhtiyacınıza göre hız veya sprite konumlarını ayarlayabilirsiniz.
User prompt
place spawn point of endlessbg3 right of bg3son and make it move when bg3son move to left and keep spawning 1 normal endlessbg3 and 1 mirrored bg3 sidebyside
User prompt
place spawn point of endless bg3 right of bg3son and when bg3son move to left make endless bg3 move to left as well,always spawn endlessbg3 but first one normal second one mirrored 3. one normal 4. one mirrored endless loop
User prompt
place bg3son spawn point 150 lower
User prompt
yesil_1 3 point olduktan 0.5 saniye sonra arka planı ve tube_1 i yok et ekrandan,onlar yok olur olmaz arka plana bg3son gelsin ve 15 saniye boyunca olduğu yerde dursun sonra sola doğru hareket etsin
Code edit (1 edits merged)
Please save this source code
User prompt
yesil_1 3 point olduğundakara isimli asseti ekranın ortasına koy silinik bir şekilde ve 0.5 saniye içinde yavaşça görünür olsun ardından tam görünür olunca 0.5 saniye içinde yine silinsin yavaşça ve kesinlikle tween library kullanma kod ile yap,
User prompt
yesil_1 3 point olduğundakara isimli asseti ekranın ortasına koy silinik bir şekilde ve 0.5 saniye içinde yavaşça görünür olsun ardından tam görünür olunca 0.5 saniye içinde yine silinsin yavaşça ve kesinlikle tween kullanma ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'ReferenceError: tween is not defined' in or related to this line: 'tween(kara, {' Line Number: 673 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
yesil_1 3 point olduğundakara isimli asseti ekranın ortasına koy silinik bir şekilde ve 0.5 saniye içinde yavaşça görünür olsun ardından tam görünür olunca 0.5 saniye içinde yine silinsin yavaşça ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
karakter yesil_1 e dokunduğunda black isimli asseti ekranın ortasına koy silinik bir şekilde ve 0.5 saniye içinde yavaşça görünür olsun ardından tam görünür olunca 0.5 saniye içinde yine silinsin yavaşça
Code edit (1 edits merged)
Please save this source code
User prompt
Aşağıdaki örnekte, yesil_1 nesnesi güncellemesinde (update) bonus puanı 3 veya daha yüksek olduğunda fade in/fade out efektini tetiklemek için nasıl bir çağrı ekleyebileceğinizi görebilirsiniz. Bu sayede, kodda mevcut olan enhancedFadeEffect() fonksiyonu, yesil_1 aktif olduğunda otomatik olarak devreye girecektir. js Kopyala Düzenle 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 bonus puanı 3 veya daha fazla ise, fade efektini tetikleyelim. if (yesil1.points >= 3 && !game.isFading) { console.log("Triggering fade effect because yesil1 is active with points: " + yesil1.points); enhancedFadeEffect(); } }; Bu değişiklikle: yesil1.update fonksiyonu her çalıştığında, bonus koşullarını kontrol eder. Eğer yesil1 puanları 3 veya daha yüksekse ve fade efekti henüz tetiklenmemişse, enhancedFadeEffect() çağrılarak fade in/fade out geçişi başlatılır. Bu yöntemle, kodda yer alan mevcut fade efektini (enhancedFadeEffect) yesil_1 aktif olduğunda kullanıma almış olursunuz. Eğer başka bir koşul veya ek ayar isterseniz, aynı mantığı uyarlayarak ekleyebilirsiniz. o3-mini
User prompt
Please fix the bug: 'ReferenceError: fadeTriggered is not defined' in or related to this line: 'return fadeTriggered;' Line Number: 631
User prompt
Please fix the bug: 'TypeError: eval is not a function' in or related to this line: 'applyBonus(eval(condition), bonusFlags[index], bonusNames[index]);' Line Number: 633
/**** * 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; } }; }); var ScrollingBackground3 = Container.expand(function () { var self = Container.call(this); // Create and position bg3son self.bg3son = LK.getAsset('bg3son', { anchorX: 0.5, anchorY: 0.5 }); self.bg3son.x = 2048 / 2; self.bg3son.y = 2732 / 2 + 150; self.addChild(self.bg3son); // Array to hold endlessbg3 sprites self.endlessbg3s = []; // Add the first two endlessbg3: first normal, second mirrored for (var i = 0; i < 2; i++) { var endless = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); // Position the first endlessbg3 immediately to the right of bg3son endless.x = self.bg3son.x + self.bg3son.width + i * endless.width; endless.y = self.bg3son.y; // Mirror the second sprite by flipping scaleX endless.scaleX = i % 2 !== 0 ? -1 : 1; self.addChild(endless); self.endlessbg3s.push(endless); } self.update = function () { // Check if bg3son has just spawned if (self.bg3son.lastSpawned === undefined) { self.bg3son.lastSpawned = true; // Set a timeout to destroy background2 and tube_1 after 1 second LK.setTimeout(function () { for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && (child.asset.name === 'background2' || child.asset.name === 'tup_1')) { child.destroy(); } } }, 1000); } // Move bg3son and endlessbg3s to the left self.bg3son.x -= 2; for (var i = 0; i < self.endlessbg3s.length; i++) { self.endlessbg3s[i].x = self.bg3son.x + self.bg3son.width + i * self.endlessbg3s[i].width; self.endlessbg3s[i].x -= 2; } // If the first endlessbg3 is completely off-screen var first = self.endlessbg3s[0]; if (first.x + first.width / 2 < 0) { // Remove the first sprite and shift it out of the array self.removeChild(first); self.endlessbg3s.shift(); // Add a new sprite immediately to the right of the last sprite in the array var last = self.endlessbg3s[self.endlessbg3s.length - 1]; var newSprite = LK.getAsset('endlessbg3', { anchorX: 0.5, anchorY: 0.5 }); newSprite.x = last.x + last.width; newSprite.y = self.bg3son.y; // Flip the new sprite's scaleX based on the last sprite's scaleX newSprite.scaleX = last.scaleX === 1 ? -1 : 1; self.addChild(newSprite); self.endlessbg3s.push(newSprite); // Spawn background3 to the right of the new endlessbg3 var background3 = LK.getAsset('background3', { anchorX: 0.5, anchorY: 0.5 }); background3.x = newSprite.x + newSprite.width; background3.y = self.bg3son.y; self.addChild(background3); } }; }); // Tube class var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Tube2 class var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Game Code ****/ var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); /**** * Global Variables & Flags ****/ var startNormalEnemy = true; var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; game.controlActive = false; var coins = []; var firstControlTriggered = false; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; /**** * (A) Eski FlyinEnemy Spawn (sağdan sola, homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) { return; } var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) { return; } var fe = new FlyinEnemy(); fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [{ x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 }]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy) || 1; enemy.vx = dx / distance * enemy.speed; enemy.vy = dy / distance * enemy.speed; enemy.zIndex = 2100; if (enemy.x < 1024) { enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); }, 10000); } }); } /**** * Normal Enemy Spawn (sağdan sola, homing false) ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube || child === yesil1) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // Instantiate ScrollingBackground3 once during game setup for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin Toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; LK.stage.addChild(game); /**** * Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) { return; } var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var yesil1 = LK.getAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); yesil1.x = tube.x; yesil1.y = tube.y - 170; yesil1.speed = 10; yesil1.points = 0; yesil1.fadeBonusApplied = false; yesil1.coinBonusApplied = false; yesil1.touchBonusApplied = false; yesil1.update = function () { yesil1.x -= yesil1.speed; if (yesil1.x < -yesil1.width) { yesil1.destroy(); } function applyBonus(condition, bonusFlag, bonusName) { if (condition && !yesil1[bonusFlag]) { yesil1[bonusFlag] = true; yesil1.points += 1; console.log(bonusName + " applied. Yesil1 points: " + yesil1.points); } } applyBonus(game.fadeTriggered, 'fadeBonusApplied', "Fade bonus"); applyBonus(coinCounter >= 30, 'coinBonusApplied', "Coin bonus"); applyBonus(player.intersects(yesil1) && yesil1.points >= 2, 'touchBonusApplied', "Touch bonus"); // Freeze condition and trigger fade effect if (yesil1.points >= 3) { console.log("Freeze game triggered because yesil1 points reached: " + yesil1.points); stopSpawn = true; LK.setTimeout(function () { var bg3son = new ScrollingBackground3(); game.addChild(bg3son); // Scale background2 to 0 after 2 seconds LK.setTimeout(function () { for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.asset && child.asset.name === 'background2') { child.scaleX = 0; child.scaleY = 0; } } }, 2000); }, 500); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // 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.x = 2048 / 2; bg3son.y = 2732 / 2 + 150; game.addChild(bg3son); // Keep bg3son stationary for 15 seconds, then move it left LK.setTimeout(function () { bg3son.update = function () { bg3son.x -= 2; // Move left }; }, 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
@@ -663,11 +663,17 @@
stopSpawn = true;
LK.setTimeout(function () {
var bg3son = new ScrollingBackground3();
game.addChild(bg3son);
+ // Scale background2 to 0 after 2 seconds
LK.setTimeout(function () {
- bg3son.scaleX = 0;
- bg3son.scaleY = 0;
+ for (var i = game.children.length - 1; i >= 0; i--) {
+ var child = game.children[i];
+ if (child.asset && child.asset.name === 'background2') {
+ child.scaleX = 0;
+ child.scaleY = 0;
+ }
+ }
}, 2000);
}, 500);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
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