User prompt
arkaya şarkı ekle
User prompt
ayarlar kısmı ekle
User prompt
şu ateşi sil ya alttan çıkan ve rekor paneli ekle en çok puanı kim yapmış diye ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
ateşe ben assets eklicem ekler misin
User prompt
Please fix the bug: 'Uncaught TypeError: tween.to is not a function' in or related to this line: 'tween.to(greenFire, {' Line Number: 185 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
3 cu zıpala olsun altından böyle yeşil bir ateş çıksın üç kere tıklıyınca yani
User prompt
game over geri getir
User prompt
game over yazan yere güzel bir tema yap güzel ölme ekranı yap
User prompt
Yukardaki puan şablonunu geri getir
User prompt
Üste puan sayması için bi şey ekler misin
User prompt
sayaç koy sayaç puan sayacı
User prompt
kanka sayacı da güzel bir şey yapsana sana zahmet
User prompt
karakterin ayakları da oynasını birde yukarda sadece imaj için uçan kuşlar olsun ve sadece hayvan aslan olmasın kanka kaplan falan da ekle 2 3 tane daha ekle
User prompt
hedefler biraz daha aralı olsun çok yakın olmasın ileri seviyelerde hızlansın ama bu kadar yakın olmasın ve karakterin hitboxu deymese bile karakter ölüyor
User prompt
arkaya hızlı bir şarkı ekle ve arka planı orman yap
User prompt
iki kere tıklayınca duble jump olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Orman Zıplama Macerası
Initial prompt
Bir ormandayız ve sadece zıplayarak engellerin üstünden atlıyoruz bazen kaplan tarzı saldırgan hayvanlar çıkarsa onların da üstünden zıplıyoruz ormanda geçicek map ona göre tample run un 2d versiyonu tek tık ile sadece zıplayarak puan topluyoruz engellerden zıplayarak
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Saldırgan hayvan (düşman) - çoklu tür desteği var Enemy = Container.expand(function (type) { var self = Container.call(this); // Tür seçimi: yoksa rastgele seç var types = ['lion', 'tiger', 'leopard', 'bear']; if (!type || types.indexOf(type) === -1) { type = types[Math.floor(Math.random() * types.length)]; } var assetId = 'enemy_' + type; var enemyAsset = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 1 }); self.type = type; self.speed = 26; // px/frame self.getHitbox = function () { // Düşmanın hitbox'ı assetten biraz küçük olsun var w = enemyAsset.width * 0.7; var h = enemyAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; self.update = function () { self.x -= self.speed; }; return self; }); // Engeller (kütük) var Obstacle = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 1 }); self.speed = 22; // px/frame self.getHitbox = function () { // Engelin hitbox'ı assetten biraz küçük olsun var w = obsAsset.width * 0.7; var h = obsAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; self.update = function () { self.x -= self.speed; }; return self; }); // Koşucu karakter (ayak animasyonu eklendi) var Runner = Container.expand(function () { var self = Container.call(this); var runnerAsset = self.attachAsset('runner', { anchorX: 0.5, anchorY: 1 }); // Ayak animasyonu için parametreler var feetAnimTime = 0; var feetAnimSpeed = 0.25 + Math.random() * 0.1; var feetAnimAmplitude = 18; // px // Zıplama parametreleri self.isJumping = false; self.jumpVelocity = 0; self.gravity = 3.2; self.jumpPower = -54; self.groundY = 0; // Oyun başında ayarlanacak // Triple jump için sayaç ve efekt self.jumpCount = 0; self.maxJumps = 3; // Yeşil ateş efekti (3. zıplamada gösterilecek) var greenFire = self.attachAsset('centerCircle', { anchorX: 0.5, anchorY: 0, scaleX: 1.2, scaleY: 0.7, y: 10, tint: 0x00ff44, alpha: 0 }); greenFire.zIndex = -1; // Koşucunun altında dursun // Daha adil çarpışma için hitbox fonksiyonu self.getHitbox = function () { // Assetin ortasından, assetten biraz küçük bir dikdörtgen döndür var w = runnerAsset.width * 0.55; var h = runnerAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; // intersects fonksiyonunu override et self.intersects = function (obj) { var a = self.getHitbox(); var b; if (typeof obj.getHitbox === "function") { b = obj.getHitbox(); } else { // fallback: obj'nin x,y,width,height'i varsa kullan b = { x: obj.x - (obj.width || 0) / 2, y: obj.y - (obj.height || 0), width: obj.width || 0, height: obj.height || 0 }; } // Basit AABB çarpışma return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y; }; // Güncelleme fonksiyonu self.update = function () { // Ayak animasyonu: zıplamıyorsa veya havadaysa farklı if (!self.isJumping && self.y === self.groundY) { feetAnimTime += feetAnimSpeed; // Koşarken ayaklar yukarı-aşağı oynar (sinüs hareketi) runnerAsset.y = Math.sin(feetAnimTime) * feetAnimAmplitude; } else { // Havada ise ayaklar sabit (hafif yukarıda) runnerAsset.y = -feetAnimAmplitude * 0.5; } if (self.isJumping) { self.y += self.jumpVelocity; self.jumpVelocity += self.gravity; // Yere inme kontrolü if (self.y >= self.groundY) { self.y = self.groundY; self.isJumping = false; self.jumpVelocity = 0; self.jumpCount = 0; // Yere inince tekrar sıfırla } } }; // Zıplama fonksiyonu self.jump = function () { if (self.jumpCount < self.maxJumps) { self.isJumping = true; self.jumpVelocity = self.jumpPower; self.jumpCount++; // 3. zıplamada yeşil ateş efekti göster if (self.jumpCount === 3) { greenFire.alpha = 1; greenFire.scaleY = 0.7 + Math.random() * 0.2; greenFire.scaleX = 1.2 + Math.random() * 0.2; // Basit bir animasyon: fade out tween.to(greenFire, { alpha: 0 }, 400, { delay: 120, easing: "easeOutQuad" }); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x7ec850 // Orman yeşili }); /**** * Game Code ****/ // Orman arka planı (örnek: orman görseli, tam ekran) // Karakter (oyuncu) // Zemin // Engeller (kütük) // Saldırgan hayvan (örnek: ayı) // Puan göstergesi için // (Text2 kullanılacak, ayrıca asset gerek yok) // Orman arka planı için tam ekran bir görsel asseti (örnek id, uygun bir orman görseliyle değiştirilebilir) // Hızlı tempolu arka plan müziği (örnek id, uygun bir müzikle değiştirilebilir) var forestBg = LK.getAsset('forestBg', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChild(forestBg); // Uçan kuşlar (sadece görsel, çarpışma yok) var flyingBirds = []; function spawnBird() { var birdTypes = ['bird1', 'bird2', 'bird3']; var birdType = birdTypes[Math.floor(Math.random() * birdTypes.length)]; var bird = LK.getAsset(birdType, { anchorX: 0.5, anchorY: 0.5, x: 2048 + 100 + Math.random() * 200, y: 120 + Math.random() * 180, scaleX: 0.8 + Math.random() * 0.5, scaleY: 0.8 + Math.random() * 0.5 }); bird.speed = 6 + Math.random() * 4; flyingBirds.push(bird); game.addChild(bird); } // Başlangıçta birkaç kuş oluştur for (var i = 0; i < 3; i++) { spawnBird(); } // Zemin var ground = LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: 2732 - 0 }); game.addChild(ground); // Hızlı tempolu arka plan müziği başlat LK.playMusic('fastForestMusic'); // Runner karakteri var runner = new Runner(); runner.x = 420; runner.groundY = 2732 - 120; // Zemin yüksekliği kadar yukarıda runner.y = runner.groundY; game.addChild(runner); // Puan var score = 0; // Basit skor metni (üstte, ortada) var scoreTxt = new Text2('0', { size: 150, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Engeller ve düşmanlar var obstacles = []; var enemies = []; // Oyun durumu var isGameOver = false; // Rastgele engel/düşman oluşturma zamanlayıcıları var nextObstacleTick = 60 + Math.floor(Math.random() * 60); // 1-2 sn arası var nextEnemyTick = 180 + Math.floor(Math.random() * 120); // 3-5 sn arası // Oyun alanı sınırları var groundY = 2732 - 120; // Oyun kontrolleri (tek dokunuşla zıplama) game.down = function (x, y, obj) { if (!isGameOver) { runner.jump(); } }; // Oyun güncelleme fonksiyonu game.update = function () { if (isGameOver) return; // Uçan kuşları güncelle for (var b = flyingBirds.length - 1; b >= 0; b--) { var bird = flyingBirds[b]; bird.x -= bird.speed; // Hafif yukarı-aşağı dalgalanma efekti bird.y += Math.sin(LK.ticks * 0.04 + b) * 0.7; if (bird.x < -200) { bird.destroy(); flyingBirds.splice(b, 1); } } // Belirli aralıklarla yeni kuş ekle (her 120 tickte bir, ekranda 4'ten az varsa) if (LK.ticks % 120 === 0 && flyingBirds.length < 4) { spawnBird(); } // Runner güncelle runner.update(); // Engelleri güncelle var _loop = function _loop() { obs = obstacles[i]; obs.update(); // Çarpışma kontrolü if (runner.intersects(obs)) { isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return { v: void 0 }; } // Ekran dışına çıktıysa sil if (obs.x < -200) { obs.destroy(); obstacles.splice(i, 1); // Puanı artır (engel başarıyla geçildi) score++; scoreTxt.setText(score); } }, obs, _ret; for (var i = obstacles.length - 1; i >= 0; i--) { _ret = _loop(); if (_ret) return _ret.v; } // Düşmanları güncelle for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; enemy.update(); // Çarpışma kontrolü if (runner.intersects(enemy)) { isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Ekran dışına çıktıysa sil if (enemy.x < -220) { enemy.destroy(); enemies.splice(j, 1); // Puanı artır (düşman başarıyla geçildi) score++; scoreTxt.setText(score); } } // Yeni engel oluşturma if (LK.ticks % nextObstacleTick === 0) { var obs = new Obstacle(); obs.x = 2048 + 100; obs.y = groundY; obstacles.push(obs); game.addChild(obs); // Sonraki engel için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur var minObstacleTick = 80 + Math.floor(score * 0.7); // skor arttıkça min aralık artar if (minObstacleTick > 300) minObstacleTick = 300; // çok açılmasın nextObstacleTick = minObstacleTick + Math.floor(Math.random() * 80) + 60; } // Yeni düşman oluşturma if (LK.ticks % nextEnemyTick === 0) { // Rastgele hayvan türüyle düşman oluştur var enemyTypes = ['lion', 'tiger', 'leopard', 'bear']; var type = enemyTypes[Math.floor(Math.random() * enemyTypes.length)]; var enemy = new Enemy(type); enemy.x = 2048 + 180; enemy.y = groundY; enemies.push(enemy); game.addChild(enemy); // Sonraki düşman için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur var minEnemyTick = 220 + Math.floor(score * 1.2); if (minEnemyTick > 500) minEnemyTick = 500; nextEnemyTick = minEnemyTick + Math.floor(Math.random() * 120) + 100; } // Hız arttırma: skor arttıkça engel ve düşmanlar hızlanır var baseObsSpeed = 22; var baseEnemySpeed = 26; var speedIncrease = Math.floor(score / 10) * 2; // her 10 puanda 2px/frame hızlanır for (var i = 0; i < obstacles.length; i++) { obstacles[i].speed = baseObsSpeed + speedIncrease; } for (var j = 0; j < enemies.length; j++) { enemies[j].speed = baseEnemySpeed + speedIncrease; } }; // Oyun yeniden başlatıldığında sıfırlama game.on('reset', function () { // Tüm engelleri ve düşmanları sil for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } for (var j = 0; j < enemies.length; j++) { enemies[j].destroy(); } obstacles = []; enemies = []; score = 0; scoreTxt.setText(score); isGameOver = false; runner.x = 420; runner.y = runner.groundY; runner.isJumping = false; runner.jumpVelocity = 0; runner.jumpCount = 0; // Yeşil ateş efektini sıfırla if (runner && runner.children) { for (var ci = 0; ci < runner.children.length; ci++) { var ch = runner.children[ci]; if (ch && ch.tint === 0x00ff44) { ch.alpha = 0; } } } nextObstacleTick = 60 + Math.floor(Math.random() * 60); nextEnemyTick = 180 + Math.floor(Math.random() * 120); });
===================================================================
--- original.js
+++ change.js
@@ -81,11 +81,22 @@
self.jumpVelocity = 0;
self.gravity = 3.2;
self.jumpPower = -54;
self.groundY = 0; // Oyun başında ayarlanacak
- // Double jump için ek sayaç
+ // Triple jump için sayaç ve efekt
self.jumpCount = 0;
- self.maxJumps = 2;
+ self.maxJumps = 3;
+ // Yeşil ateş efekti (3. zıplamada gösterilecek)
+ var greenFire = self.attachAsset('centerCircle', {
+ anchorX: 0.5,
+ anchorY: 0,
+ scaleX: 1.2,
+ scaleY: 0.7,
+ y: 10,
+ tint: 0x00ff44,
+ alpha: 0
+ });
+ greenFire.zIndex = -1; // Koşucunun altında dursun
// Daha adil çarpışma için hitbox fonksiyonu
self.getHitbox = function () {
// Assetin ortasından, assetten biraz küçük bir dikdörtgen döndür
var w = runnerAsset.width * 0.55;
@@ -145,8 +156,21 @@
if (self.jumpCount < self.maxJumps) {
self.isJumping = true;
self.jumpVelocity = self.jumpPower;
self.jumpCount++;
+ // 3. zıplamada yeşil ateş efekti göster
+ if (self.jumpCount === 3) {
+ greenFire.alpha = 1;
+ greenFire.scaleY = 0.7 + Math.random() * 0.2;
+ greenFire.scaleX = 1.2 + Math.random() * 0.2;
+ // Basit bir animasyon: fade out
+ tween.to(greenFire, {
+ alpha: 0
+ }, 400, {
+ delay: 120,
+ easing: "easeOutQuad"
+ });
+ }
}
};
return self;
});
@@ -365,7 +389,16 @@
runner.y = runner.groundY;
runner.isJumping = false;
runner.jumpVelocity = 0;
runner.jumpCount = 0;
+ // Yeşil ateş efektini sıfırla
+ if (runner && runner.children) {
+ for (var ci = 0; ci < runner.children.length; ci++) {
+ var ch = runner.children[ci];
+ if (ch && ch.tint === 0x00ff44) {
+ ch.alpha = 0;
+ }
+ }
+ }
nextObstacleTick = 60 + Math.floor(Math.random() * 60);
nextEnemyTick = 180 + Math.floor(Math.random() * 120);
});
\ No newline at end of file
Safarici bir runner yeşil üstlü. In-Game asset. 2d. High contrast. No shadows
Aslan. In-Game asset. 2d. High contrast. No shadows
Orman. In-Game asset. 2d. High contrast. No shadows
orman toprağı olsun zemin. In-Game asset. 2d. High contrast. No shadows
kuş. In-Game asset. 2d. High contrast. No shadows
Leopar. In-Game asset. 2d. High contrast. No shadows
ayı. In-Game asset. 2d. High contrast. No shadows
green fire. In-Game asset. 2d. High contrast. No shadows