User prompt
olmadı düzelt
User prompt
öldükten sonra oyunu durdur oyuncunun kalıcı özellikler alabileceği basti bir mağaza yap
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'setText')' in or related to this line: 'scoreTxt.setText('Score: ' + score);' Line Number: 553
User prompt
menüyü komple kaldır
User prompt
olmadı
User prompt
şimdi çalışan basit bir menü yap
User prompt
oyunu ingilizce yap komple
User prompt
ana menü deki butonlar çalışmıyor oyuna başla yazan yere tıklayınca ana menünün gitmesi oyunun başlaması lazım
User prompt
ana menü yap bu menü de oyuna başlamak için bir buton,oyunu nasıl oynancağını öğreten bir buton,toplanılan coinlerle kalıcı özellikler alınabilecek bir buton ekle bu koyduğun butonlar çalıştığından emin ol
User prompt
hata veriyor düzelt
User prompt
ana menüde sadece yazı yazıyor çalışan bir ana menü yap ve arka planı mavi yap
User prompt
anamenüdeyken oyunu dondur
User prompt
ana menü yap bu menü de oyuna başlamak için bir buton,oyunu nasıl oynancağını öğreten bir buton,toplanılan coinlerle kalıcı özellikler alınabilecek bir buton ekle
User prompt
kalkmadı ekrana tıklayınca mermi koyuyor yere onu kaldır bug oluyor
User prompt
ekrana tıklayınca hareket etmeyen bir mermi koyuyor kaldır onu
User prompt
mousemla birlikte hareket etsin oyuncu
User prompt
coinler powerup gibi rastgele yerlerde de çıksın sıklıkla coin çıkmalı
User prompt
coin oyunda görünsün oyuncu coini toplarsa eklensin ve coin kalıcı olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
oyuna coin ekle
User prompt
kontreller kullanıcı dostu olsun
User prompt
oyuncunun max canını 10 yap
User prompt
düşmanların hızları artmasın atış hızlarıda sadece canları artmalı oyun ilerledikce
User prompt
enemy2 hata veriyor oyuncucunun etrafında dönüyor düzelt
User prompt
kombo özelliği ekle,düşmanlar oyun ilerledikce güçlensin,daha sıklıkla powerup çıksın
User prompt
bütün powerup ları kaldır basit powerup lar ekle fire rate ,üçlü ateş etme gibi gibi
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Düşman karakteri (AI) var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGfx = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemyGfx.width * 0.5; self.type = 1; self.speed = 3 + Math.random() * 2; self.dir = Math.random() * Math.PI * 2; self.shootCooldown = 60 + Math.floor(Math.random() * 60); self.targetX = 0; self.targetY = 0; self.maxHealth = 3 + Math.floor(Math.random() * 2); // 3-4 can self.health = self.maxHealth; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xffff00, 200); if (self.health <= 0) { // Destroy health bar if exists if (self._healthBar) { self._healthBar.destroy(); self._healthBar = null; } self.destroy(); // Skor boost varsa 2 puan ver if (player._superScoreBoost && player._scoreBoost > 0) { score += 10; } else if (player._scoreBoost && player._scoreBoost > 0) { score += 2; } else { score++; } updateScoreAndLevel(); if (score > 0 && score % 10 === 0) { increaseDifficulty(); } // Remove from enemies array in main loop self._shouldRemove = true; } }; self.update = function () { if (self._frozen && self._frozen > 0) { // Donmuşsa titret self.x += Math.sin(self._frozen) * 2; self.y += Math.cos(self._frozen) * 2; return; } // Basit AI: Oyuncuya doğru hareket et var dx = player.x - self.x; var dy = player.y - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 1) { self.x += dx / dist * self.speed; self.y += dy / dist * self.speed; } // Ateş etme if (self.shootCooldown > 0) { self.shootCooldown--; } else { self.shootCooldown = 90 + Math.floor(Math.random() * 60); spawnEnemyBullet(self.x, self.y, player.x, player.y); } }; return self; }); // Düşman karakteri 2 (dairesel hareket, elips) var Enemy2 = Container.expand(function () { var self = Container.call(this); var enemyGfx = self.attachAsset('enemy2', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemyGfx.width * 0.5; self.type = 2; self.angle = Math.random() * Math.PI * 2; // Enemy2: Orbit around a random point in the arena, not the player self.centerX = 200 + Math.random() * 1648; self.centerY = 200 + Math.random() * 2332; self.orbitRadius = 400 + Math.random() * 200; self.speed = 0.012 + Math.random() * 0.008; self.shootCooldown = 120 + Math.floor(Math.random() * 60); self.maxHealth = 4 + Math.floor(Math.random() * 2); // 4-5 can self.health = self.maxHealth; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xffff00, 200); if (self.health <= 0) { // Destroy health bar if exists if (self._healthBar) { self._healthBar.destroy(); self._healthBar = null; } self.destroy(); if (player._scoreBoost && player._scoreBoost > 0) { score += 2; } else { score++; } updateScoreAndLevel(); if (score > 0 && score % 10 === 0) { increaseDifficulty(); } self._shouldRemove = true; } }; self.update = function () { if (self._frozen && self._frozen > 0) { self.x += Math.sin(self._frozen) * 2; self.y += Math.cos(self._frozen) * 2; return; } self.angle += self.speed; self.x = self.centerX + Math.cos(self.angle) * self.orbitRadius; self.y = self.centerY + Math.sin(self.angle) * self.orbitRadius; // Ateş etme if (self.shootCooldown > 0) { self.shootCooldown--; } else { self.shootCooldown = 120 + Math.floor(Math.random() * 60); spawnEnemyBullet(self.x, self.y, player.x, player.y); } }; return self; }); // Düşman karakteri 3 (rastgele zıplama, mor kutu) var Enemy3 = Container.expand(function () { var self = Container.call(this); var enemyGfx = self.attachAsset('enemy3', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemyGfx.width * 0.5; self.type = 3; self.jumpTimer = 60 + Math.floor(Math.random() * 60); self.targetX = 200 + Math.random() * 1648; self.targetY = 200 + Math.random() * 2332; self.speed = 12 + Math.random() * 6; self.shootCooldown = 100 + Math.floor(Math.random() * 60); self.maxHealth = 2 + Math.floor(Math.random() * 2); // 2-3 can self.health = self.maxHealth; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xffff00, 200); if (self.health <= 0) { // Destroy health bar if exists if (self._healthBar) { self._healthBar.destroy(); self._healthBar = null; } self.destroy(); if (player._scoreBoost && player._scoreBoost > 0) { score += 2; } else { score++; } updateScoreAndLevel(); if (score > 0 && score % 10 === 0) { increaseDifficulty(); } self._shouldRemove = true; } }; self.update = function () { if (self._frozen && self._frozen > 0) { self.x += Math.sin(self._frozen) * 2; self.y += Math.cos(self._frozen) * 2; return; } self.jumpTimer--; if (self.jumpTimer <= 0) { self.targetX = 200 + Math.random() * 1648; self.targetY = 200 + Math.random() * 2332; self.jumpTimer = 60 + Math.floor(Math.random() * 60); } var dx = self.targetX - self.x; var dy = self.targetY - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 1) { self.x += dx / dist * self.speed; self.y += dy / dist * self.speed; } // Ateş etme if (self.shootCooldown > 0) { self.shootCooldown--; } else { self.shootCooldown = 100 + Math.floor(Math.random() * 60); spawnEnemyBullet(self.x, self.y, player.x, player.y); } }; return self; }); // Düşman mermisi var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGfx = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.radius = bulletGfx.width * 0.5; self.vx = 0; self.vy = 0; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); // Oyuncu karakteri var Player = Container.expand(function () { var self = Container.call(this); var playerGfx = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerGfx.width * 0.5; self.shootCooldown = 0; // Oyuncuya can ekle self.maxHealth = typeof playerMaxHealth !== "undefined" ? playerMaxHealth : 5; self.health = typeof playerHealth !== "undefined" ? playerHealth : self.maxHealth; self.update = function () { if (self.shootCooldown > 0) self.shootCooldown--; }; return self; }); // Oyuncu mermisi var PlayerBullet = Container.expand(function () { var self = Container.call(this); var bulletGfx = self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); self.radius = bulletGfx.width * 0.5; self.vx = 0; self.vy = 0; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); // Güçlendirici (PowerUp) kutusu var PowerUp = Container.expand(function () { var self = Container.call(this); var powerGfx = self.attachAsset('powerUp', { anchorX: 0.5, anchorY: 0.5 }); self.radius = powerGfx.width * 0.5; self.type = "power"; // Sadece basit ve çalışan powerup efektleri var effects = ["rapid", // Hızlı ateş (fire rate) "triple", // Üçlü atış "shield", // Kalkan "heal" // Can doldur ]; self.effect = effects[Math.floor(Math.random() * effects.length)]; self.update = function () { // Hafifçe döndür powerGfx.rotation += 0.08; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Global değişkenler // Oyuncu karakteri (mavi kutu) // Düşman (kırmızı kutu) // Düşman 2 (yeşil elips) // Düşman 3 (mor kutu) // Oyuncu mermisi (sarı kutu) // Düşman mermisi (turuncu kutu) // Vurulma efekti için ses var player; var enemies = []; var playerBullets = []; var enemyBullets = []; var powerUps = []; var powerActive = false; var powerTimer = 0; var dragNode = null; var lastPlayerPos = { x: 0, y: 0 }; var score = 0; var level = 1; var gameTick = 0; var spawnTimer = 0; var isGameOver = false; // Kombo değişkenleri var comboCount = 0; var comboTimer = 0; var maxComboTime = 120; // 2 saniye (120 frame) var maxCombo = 0; // Kombo GUI var comboTxt = new Text2('', { size: 80, fill: 0xFFFA00, font: "Impact" }); comboTxt.anchor.set(0.5, 0); LK.gui.top.addChild(comboTxt); comboTxt.y = 260; // Can barı değişkenleri var playerMaxHealth = 10; var playerHealth = playerMaxHealth; // Can barı GUI var healthTxt = new Text2('Can: ' + playerHealth, { size: 70, fill: 0xFF4444 }); healthTxt.anchor.set(0.5, 0); LK.gui.top.addChild(healthTxt); healthTxt.y = 180; // PowerUp oluşturucu function spawnPowerUp() { var p = new PowerUp(); // Güvenli alan içinde rastgele konum p.x = 200 + Math.random() * 1648; p.y = 200 + Math.random() * 2332; powerUps.push(p); game.addChild(p); } // Skor ve seviye göstergesi var scoreTxt = new Text2('Skor: 0', { size: 90, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2('Seviye: 1', { size: 60, fill: "#fff" }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 100; // Eğlenceli: Arena event popup var eventPopupTxt = new Text2('', { size: 70, fill: 0xFFFA00, font: "Impact" }); eventPopupTxt.anchor.set(0.5, 0.5); eventPopupTxt.visible = false; LK.gui.center.addChild(eventPopupTxt); // Arena event popup fonksiyonu function showArenaEventPopup(msg) { eventPopupTxt.setText(msg); eventPopupTxt.visible = true; eventPopupTxt.alpha = 1; tween(eventPopupTxt, { alpha: 0 }, { duration: 1200, onFinish: function onFinish() { eventPopupTxt.visible = false; } }); } // Oyuncu oluştur player = new Player(); game.addChild(player); player.x = 2048 / 2; player.y = 2732 / 2; // Düşman oluşturucu function spawnEnemy() { var t = Math.random(); var e; if (t < 0.4) { e = new Enemy(); } else if (t < 0.7) { e = new Enemy2(); } else { e = new Enemy3(); } // Düşmanları güçlendir: seviye arttıkça SADECE can artsın, hız ve atış hızı sabit kalsın if (typeof e.maxHealth !== "undefined") { e.maxHealth += Math.floor(level / 3); e.health = e.maxHealth; } // Hız ve atış hızı artık artmıyor // Rastgele kenardan başlat var edge = Math.floor(Math.random() * 4); if (edge === 0) { // üst e.x = 200 + Math.random() * 1648; e.y = -100; } else if (edge === 1) { // sağ e.x = 2148; e.y = 200 + Math.random() * 2332; } else if (edge === 2) { // alt e.x = 200 + Math.random() * 1648; e.y = 2832; } else { // sol e.x = -100; e.y = 200 + Math.random() * 2332; } enemies.push(e); game.addChild(e); } // Düşman mermisi oluşturucu function spawnEnemyBullet(sx, sy, tx, ty) { var b = new EnemyBullet(); b.x = sx; b.y = sy; var dx = tx - sx; var dy = ty - sy; var dist = Math.sqrt(dx * dx + dy * dy); var speed = 18 + level * 2; b.vx = dx / dist * speed; b.vy = dy / dist * speed; enemyBullets.push(b); game.addChild(b); } // Oyuncu mermisi oluşturucu function spawnPlayerBullet(sx, sy, tx, ty) { var b = new PlayerBullet(); b.x = sx; b.y = sy; var dx = tx - sx; var dy = ty - sy; var dist = Math.sqrt(dx * dx + dy * dy); var speed = 32; b.vx = dx / dist * speed; b.vy = dy / dist * speed; playerBullets.push(b); game.addChild(b); LK.getSound('shoot').play(); } // Skor ve seviye güncelle function updateScoreAndLevel() { scoreTxt.setText('Skor: ' + score); levelTxt.setText('Seviye: ' + level); healthTxt.setText('Can: ' + playerHealth); updateComboText(); } // Kombo GUI güncelle function updateComboText() { if (comboCount > 1) { comboTxt.setText("KOMBO x" + comboCount + "!"); comboTxt.visible = true; comboTxt.alpha = 1; } else { comboTxt.visible = false; } } // Oyun zorluğunu artır function increaseDifficulty() { level++; updateScoreAndLevel(); } // Oyun bitti function gameOver() { if (isGameOver) return; isGameOver = true; LK.effects.flashScreen(0xff0000, 1000); LK.getSound('hit').play(); LK.showGameOver(); } // Oyun kazandı function youWin() { LK.showYouWin(); } // Sürükleme ve ateş etme function handleMove(x, y, obj) { if (dragNode) { // Hareket farkını uygula var dx = x - lastPlayerPos.x; var dy = y - lastPlayerPos.y; dragNode.x += dx; dragNode.y += dy; // Kullanıcı dostu: Oyuncunun ekran dışına çıkmasını engelle var minX = dragNode.radius + 20; var maxX = 2048 - dragNode.radius - 20; var minY = dragNode.radius + 20; var maxY = 2732 - dragNode.radius - 20; if (dragNode.x < minX) dragNode.x = minX; if (dragNode.x > maxX) dragNode.x = maxX; if (dragNode.y < minY) dragNode.y = minY; if (dragNode.y > maxY) dragNode.y = maxY; lastPlayerPos.x = x; lastPlayerPos.y = y; } } // Oyun alanı dışı kontrolü function isOutOfBounds(obj) { return obj.x < -200 || obj.x > 2248 || obj.y < -200 || obj.y > 2932; } // Oyun ana döngüsü game.update = function () { if (isGameOver) return; gameTick++; // Eğlenceli: Rastgele arena olayları (ör: meteor yağmuru, bonus yağmuru, düşman dondurma) // Her 15 saniyede bir rastgele bir olay tetiklenebilir if (gameTick % 900 === 0 && gameTick > 0) { var eventType = Math.floor(Math.random() * 3); if (eventType === 0) { // Meteor yağmuru: 10 hızlı mermi yukarıdan aşağıya düşer for (var m = 0; m < 10; m++) { var b = new EnemyBullet(); b.x = 200 + Math.random() * 1648; b.y = -80 - m * 60; b.vx = 0; b.vy = 32 + Math.random() * 8; enemyBullets.push(b); game.addChild(b); } // Kısa efekt LK.effects.flashScreen(0xffa500, 400); showArenaEventPopup("Meteor Yağmuru!"); } else if (eventType === 1) { // Bonus yağmuru: 5 powerUp birden düşer for (var p = 0; p < 5; p++) { var pu = new PowerUp(); pu.x = 200 + Math.random() * 1648; pu.y = 200 + Math.random() * 2332; powerUps.push(pu); game.addChild(pu); } LK.effects.flashScreen(0x00ffcc, 400); showArenaEventPopup("Bonus Yağmuru!"); } else if (eventType === 2) { // Düşmanlar 3 saniye donar for (var i = 0; i < enemies.length; i++) { enemies[i]._frozen = 180; // 3 saniye } LK.effects.flashScreen(0x66ccff, 400); showArenaEventPopup("Düşmanlar Dondu!"); } } // Düşmanları dondurma efekti uygula for (var i = 0; i < enemies.length; i++) { if (enemies[i]._frozen && enemies[i]._frozen > 0) { enemies[i]._frozen--; continue; // update çağrılmasın, düşman hareket etmesin } } // Oyuncu update player.update(); // Oyuncu canını playerHealth ile senkronize et if (typeof player.health !== "undefined" && typeof playerHealth !== "undefined" && player.health !== playerHealth) { player.health = playerHealth; } if (typeof player.maxHealth !== "undefined" && typeof playerMaxHealth !== "undefined" && player.maxHealth !== playerMaxHealth) { player.maxHealth = playerMaxHealth; } // Otomatik ateş etme (her 10 frame'de bir, rapid fire varsa daha hızlı) var shootInterval = powerActive ? 4 : 10; if (!isGameOver && gameTick % shootInterval === 0 && enemies.length > 0) { // En yakın düşmanı bul var minDist = Infinity; var targetEnemy = null; for (var i = 0; i < enemies.length; i++) { var e = enemies[i]; var dx = e.x - player.x; var dy = e.y - player.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < minDist) { minDist = dist; targetEnemy = e; } } if (targetEnemy) { // Triple shot powerup varsa üçlü mermi ateşle if (player._tripleShot && player._tripleShot > 0) { for (var s = -1; s <= 1; s++) { var angle = Math.atan2(targetEnemy.y - player.y, targetEnemy.x - player.x) + s * 0.18; var tx = player.x + Math.cos(angle) * 1000; var ty = player.y + Math.sin(angle) * 1000; spawnPlayerBullet(player.x, player.y, tx, ty); } } else { spawnPlayerBullet(player.x, player.y, targetEnemy.x, targetEnemy.y); } } } // Düşman update for (var i = enemies.length - 1; i >= 0; i--) { var e = enemies[i]; e.update(); // Can barı çizimi (her düşmanın üstünde) if (!e._healthBar) { e._healthBar = new Text2('', { size: 38, fill: 0xFF4444 }); e._healthBar.anchor.set(0.5, 1); game.addChild(e._healthBar); } if (typeof e.health !== "undefined" && typeof e.maxHealth !== "undefined") { e._healthBar.setText("♥" + e.health + "/" + e.maxHealth); e._healthBar.x = e.x; e._healthBar.y = e.y - e.radius - 10; e._healthBar.visible = true; } else { e._healthBar.visible = false; } // Çarpışma: oyuncu & düşman if (player.intersects(e)) { if (player._shield && player._shield > 0) { // Kalkan varsa hasar alma, kalkanı azalt player._shield--; LK.effects.flashObject(player, 0x00ffff, 400); if (player._shield === 0) { showArenaEventPopup("Kalkan Kırıldı!"); } else { showArenaEventPopup("Kalkan: " + player._shield + " vuruş kaldı!"); } } else { playerHealth--; if (typeof player.health !== "undefined") player.health = playerHealth; updateScoreAndLevel(); LK.effects.flashObject(player, 0xff4444, 400); if (playerHealth <= 0) { gameOver(); return; } } // Düşmanı yok et, can azalınca if (typeof e.takeDamage === "function") { e.takeDamage(e.health); // Tüm canı gitmeli if (e._shouldRemove) { if (e._healthBar) { e._healthBar.destroy(); } enemies.splice(i, 1); // KOMBO: Düşman öldürünce kombo artır comboCount++; comboTimer = maxComboTime; if (comboCount > maxCombo) maxCombo = comboCount; updateComboText(); continue; } } else { e.destroy(); if (e._healthBar) { e._healthBar.destroy(); } enemies.splice(i, 1); // KOMBO: Düşman öldürünce kombo artır comboCount++; comboTimer = maxComboTime; if (comboCount > maxCombo) maxCombo = comboCount; updateComboText(); continue; } } // Düşman oyun dışıysa sil if (isOutOfBounds(e)) { if (e._healthBar) { e._healthBar.destroy(); } e.destroy(); enemies.splice(i, 1); } } // Oyuncu mermisi update for (var i = playerBullets.length - 1; i >= 0; i--) { var b = playerBullets[i]; b.update(); var hit = false; // Düşmanlara çarpma for (var j = enemies.length - 1; j >= 0; j--) { var e = enemies[j]; if (b.intersects(e)) { LK.getSound('hit').play(); if (typeof e.takeDamage === "function") { e.takeDamage(1); if (e._shouldRemove) { enemies.splice(j, 1); } } hit = true; break; } } if (hit || isOutOfBounds(b)) { b.destroy(); playerBullets.splice(i, 1); } } // Düşman mermisi update for (var i = enemyBullets.length - 1; i >= 0; i--) { var b = enemyBullets[i]; b.update(); // Oyuncuya çarpma if (b.intersects(player)) { if (player._shield && player._shield > 0) { // Kalkan varsa hasar alma, kalkanı azalt player._shield--; LK.effects.flashObject(player, 0x00ffff, 400); if (player._shield === 0) { showArenaEventPopup("Kalkan Kırıldı!"); } else { showArenaEventPopup("Kalkan: " + player._shield + " vuruş kaldı!"); } } else { playerHealth--; if (typeof player.health !== "undefined") player.health = playerHealth; updateScoreAndLevel(); LK.effects.flashObject(player, 0xff4444, 400); if (playerHealth <= 0) { b.destroy(); enemyBullets.splice(i, 1); gameOver(); return; } } b.destroy(); enemyBullets.splice(i, 1); continue; } if (isOutOfBounds(b)) { b.destroy(); enemyBullets.splice(i, 1); } } // KOMBO zamanlayıcı: Kombo süresi dolarsa sıfırla if (comboCount > 0) { comboTimer--; if (comboTimer <= 0) { comboCount = 0; updateComboText(); } } // PowerUp update ve çarpışma for (var i = powerUps.length - 1; i >= 0; i--) { var p = powerUps[i]; p.update(); if (player.intersects(p)) { // PowerUp alındı var effect = p.effect; var popupMsg = ""; if (effect === "rapid") { // Hızlı ateş: 10 saniye boyunca 2 kat hızlı ateş powerActive = true; powerTimer = 600; popupMsg = "HIZLI ATEŞ! (10sn)"; } else if (effect === "triple") { // 10 saniye boyunca üçlü atış player._tripleShot = 600; popupMsg = "ÜÇLÜ ATIŞ! (10sn)"; } else if (effect === "shield") { // 5 vuruşluk kalkan player._shield = 5; popupMsg = "Kalkan (5 vuruş)!"; } else if (effect === "heal") { // Tüm canı doldur playerHealth = playerMaxHealth; if (typeof player.health !== "undefined") player.health = playerHealth; updateScoreAndLevel(); popupMsg = "Tüm Can Doldu!"; } LK.effects.flashObject(player, 0x00ffcc, 400); showArenaEventPopup("PowerUp: " + popupMsg); p.destroy(); powerUps.splice(i, 1); } else if (isOutOfBounds(p)) { p.destroy(); powerUps.splice(i, 1); } } // PowerUp etkisi süresi if (powerActive) { powerTimer--; if (powerTimer <= 0) { powerActive = false; } } // Triple shot süresi azalt if (player._tripleShot && player._tripleShot > 0) { player._tripleShot--; if (player._tripleShot <= 0) { player._tripleShot = 0; } } // PowerUp spawn (her 6 saniyede bir) if (gameTick % 360 === 0) { spawnPowerUp(); } // Düşman spawn var spawnInterval = Math.max(60 - level * 2, 20); if (gameTick % spawnInterval === 0) { spawnEnemy(); } }; // Sürükleme başlat game.down = function (x, y, obj) { // Oyuncuya tıklanırsa sürükle var px = player.x, py = player.y; var dx = x - px, dy = y - py; var dist = Math.sqrt(dx * dx + dy * dy); // Kullanıcı dostu: Oyuncunun üstüne dokunulduysa sürüklemeye başla, yoksa ateş et if (dist < player.radius + 80) { // daha geniş alan, daha kolay sürükleme dragNode = player; lastPlayerPos.x = x; lastPlayerPos.y = y; // Sürükleme başladığında ateş etme, yanlışlıkla ateşlemeyi önle // Drag threshold: set a flag to check if drag distance exceeds a threshold before firing dragNode._dragStarted = false; dragNode._dragStartX = x; dragNode._dragStartY = y; dragNode._dragStartTime = Date.now(); } else { // Oyuncu mermisi ateşle spawnPlayerBullet(player.x, player.y, x, y); } }; // Sürükleme bırak game.up = function (x, y, obj) { if (dragNode && typeof dragNode._dragStarted !== "undefined") { // Eğer drag başlamadıysa ve kısa sürede bırakıldıysa, ateş et (tap-to-shoot) var dragDx = x - dragNode._dragStartX; var dragDy = y - dragNode._dragStartY; var dragDist = Math.sqrt(dragDx * dragDx + dragDy * dragDy); var dragTime = Date.now() - (dragNode._dragStartTime || 0); if (!dragNode._dragStarted && dragDist < 24 && dragTime < 200) { spawnPlayerBullet(player.x, player.y, x, y); } dragNode._dragStarted = false; dragNode._dragStartX = 0; dragNode._dragStartY = 0; dragNode._dragStartTime = 0; } dragNode = null; // Kullanıcı dostu: Sürükleme bırakıldığında son pozisyonu güncelle lastPlayerPos.x = 0; lastPlayerPos.y = 0; }; // Sürükleme hareketi game.move = function (x, y, obj) { // Drag threshold: only start moving player if drag distance exceeds a threshold if (dragNode && typeof dragNode._dragStarted !== "undefined" && !dragNode._dragStarted) { var dragDx = x - dragNode._dragStartX; var dragDy = y - dragNode._dragStartY; var dragDist = Math.sqrt(dragDx * dragDx + dragDy * dragDy); var dragTime = Date.now() - (dragNode._dragStartTime || 0); if (dragDist > 24 || dragTime > 200) { // daha düşük threshold ve kısa süre dragNode._dragStarted = true; } } if (!dragNode || typeof dragNode._dragStarted === "undefined" || dragNode._dragStarted) { handleMove(x, y, obj); } }; // Oyun başında skor, seviye ve canı sıfırla score = 0; level = 1; playerHealth = playerMaxHealth; if (typeof player !== "undefined") { if (typeof player.maxHealth !== "undefined") player.maxHealth = playerMaxHealth; if (typeof player.health !== "undefined") player.health = playerHealth; } updateScoreAndLevel();
===================================================================
--- original.js
+++ change.js
@@ -818,9 +818,9 @@
var dx = x - px,
dy = y - py;
var dist = Math.sqrt(dx * dx + dy * dy);
// Kullanıcı dostu: Oyuncunun üstüne dokunulduysa sürüklemeye başla, yoksa ateş et
- if (dist < player.radius + 60) {
+ if (dist < player.radius + 80) {
// daha geniş alan, daha kolay sürükleme
dragNode = player;
lastPlayerPos.x = x;
lastPlayerPos.y = y;
@@ -828,19 +828,29 @@
// Drag threshold: set a flag to check if drag distance exceeds a threshold before firing
dragNode._dragStarted = false;
dragNode._dragStartX = x;
dragNode._dragStartY = y;
+ dragNode._dragStartTime = Date.now();
} else {
// Oyuncu mermisi ateşle
spawnPlayerBullet(player.x, player.y, x, y);
}
};
// Sürükleme bırak
game.up = function (x, y, obj) {
if (dragNode && typeof dragNode._dragStarted !== "undefined") {
+ // Eğer drag başlamadıysa ve kısa sürede bırakıldıysa, ateş et (tap-to-shoot)
+ var dragDx = x - dragNode._dragStartX;
+ var dragDy = y - dragNode._dragStartY;
+ var dragDist = Math.sqrt(dragDx * dragDx + dragDy * dragDy);
+ var dragTime = Date.now() - (dragNode._dragStartTime || 0);
+ if (!dragNode._dragStarted && dragDist < 24 && dragTime < 200) {
+ spawnPlayerBullet(player.x, player.y, x, y);
+ }
dragNode._dragStarted = false;
dragNode._dragStartX = 0;
dragNode._dragStartY = 0;
+ dragNode._dragStartTime = 0;
}
dragNode = null;
// Kullanıcı dostu: Sürükleme bırakıldığında son pozisyonu güncelle
lastPlayerPos.x = 0;
@@ -852,10 +862,11 @@
if (dragNode && typeof dragNode._dragStarted !== "undefined" && !dragNode._dragStarted) {
var dragDx = x - dragNode._dragStartX;
var dragDy = y - dragNode._dragStartY;
var dragDist = Math.sqrt(dragDx * dragDx + dragDy * dragDy);
- if (dragDist > 30) {
- // 30px threshold for mobile friendliness
+ var dragTime = Date.now() - (dragNode._dragStartTime || 0);
+ if (dragDist > 24 || dragTime > 200) {
+ // daha düşük threshold ve kısa süre
dragNode._dragStarted = true;
}
}
if (!dragNode || typeof dragNode._dragStarted === "undefined" || dragNode._dragStarted) {
powerup. In-Game asset. 2d. High contrast. No shadows
robot enemy. In-Game asset. 2d. High contrast. No shadows
green robot enemy. In-Game asset. 2d. High contrast. No shadows
purple robot enemy. In-Game asset. 2d. High contrast. No shadows
player robot. In-Game asset. 2d. High contrast. No shadows
robot ammo. In-Game asset. 2d. High contrast. No shadows
coin. In-Game asset. 2d. High contrast. No shadows
robot ammo very red very big. In-Game asset. 2d. High contrast. No shadows
2d space bg. In-Game asset. 2d. High contrast. No shadows