User prompt
score yi sola yasla
User prompt
İz olarak silah çıkmasın
User prompt
HEDEF ÜZERİNDEKİ İZ iz olsun
User prompt
SİLAH MERMİ ATSIN
User prompt
Seviye 1 tamamlandı yazısı çıktıktan 5 saniye sonra diğer seviyeye geçsin
User prompt
"Seviye Tamamlandı!" yazısı ile "Sonraki Seviye" yazısı arasında 20 px aralık olsun
User prompt
"Seviye Tamamlandı!" yazısı ile "Sonraki Seviye" yazısı arasında 200 px aralık olsun
User prompt
seviye tamamlandı yazısı sonraki seviye yazısının 200 px üstünde yazsın
User prompt
seviye tamamlandı yazısı sonraki seviye yazısının üstüne gelsin
User prompt
hedeflerden birini vurunca seviye yazısı gitsin diğer seviyeye kadar
User prompt
mermi silahın baktığıyerden çıksın
User prompt
silah fareye baksın
User prompt
elimizde silah olsun ve hedefler sabit olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Target Master: Character Quest
Initial prompt
oyuncu ilk başta karaterini seçsin ve oyuna başlasın oyunda hedefler olsun ve onları vurarak seviye atlayalım 10 seviye olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Mermi (Bullet) sınıfı var Bullet = Container.expand(function () { var self = Container.call(this); // Mermi asseti olarak 'mermi' görselini kullan self.asset = self.attachAsset('mermi', { anchorX: 0.5, anchorY: 1 // Silah ucundan çıksın }); self.asset.width = 32; self.asset.height = 80; // Mermi yönü ve hızı self.speedX = 0; self.speedY = -50; // default yukarı self.update = function () { self.x += self.speedX; self.y += self.speedY; }; return self; }); // Karakter sınıfı var PlayerCharacter = Container.expand(function () { var self = Container.call(this); self.type = 'box'; // default self.asset = null; self.gun = null; self.setType = function (type) { self.removeChildren(); self.type = type; if (type === 'box') { self.asset = self.attachAsset('charBox', { anchorX: 0.5, anchorY: 0.5 }); } else { self.asset = self.attachAsset('charEllipse', { anchorX: 0.5, anchorY: 0.5 }); } // Add gun asset (simple yellow ellipse as placeholder) self.gun = self.attachAsset('hitEffect', { anchorX: 0.5, anchorY: 1, x: 0, y: -80 }); self.gun.width = 40; self.gun.height = 80; self.gun.tint = 0xffff00; }; self.setType('box'); return self; }); // Hedef (düşman/nesne) sınıfı var Target = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('target', { anchorX: 0.5, anchorY: 0.5 }); self.isHit = false; self.hitEffect = null; self.speedY = 0; self.speedX = 0; self.setRandomSpeed = function (level) { // Hedefler sabit, hareket etmeyecek self.speedY = 0; self.speedX = 0; }; self.update = function () { if (self.isHit) return; // Sabit hedef, hareket yok }; self.hit = function () { if (self.isHit) return; self.isHit = true; // Hedefin üzerinde iz bırak var iz = self.attachAsset('iz', { anchorX: 0.5, anchorY: 0.5 }); iz.x = 0; iz.y = 0; iz.alpha = 0.8; iz.width = 60; iz.height = 60; // Vuruş efekti self.hitEffect = self.attachAsset('hitEffect', { anchorX: 0.5, anchorY: 0.5 }); self.hitEffect.alpha = 1; tween(self.hitEffect, { alpha: 0 }, { duration: 400, onFinish: function onFinish() { self.destroy(); } }); LK.getSound('hit').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Oyun değişkenleri // Karakterler için kutu ve elips şeklinde iki farklı karakter // Hedefler için kırmızı daire // Vuruş efekti için küçük sarı daire // Atış efekti için ses var player = null; var targets = []; var level = 1; var maxLevel = 10; var targetsToSpawn = 0; var targetsLeft = 0; var score = 0; var isSelectingCharacter = true; var selectedType = 'box'; var levelText = null; var scoreText = null; var infoText = null; var nextButton = null; var dragNode = null; // GUI elemanları levelText = new Text2('', { size: 90, fill: "#fff" }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); scoreText = new Text2('', { size: 90, fill: "#fff" }); // Sola yasla: anchor'ı (0,0) yap ve gui.topLeft'e ekle scoreText.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreText); infoText = new Text2('', { size: 80, fill: "#fff" }); infoText.anchor.set(0.5, 0.5); LK.gui.center.addChild(infoText); // Karakter seçimi ekranı var charBoxBtn = LK.getAsset('charBox', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 - 220, y: 2732 / 2 - 100 }); var charEllipseBtn = LK.getAsset('charEllipse', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 + 220, y: 2732 / 2 - 100 }); var charBoxLabel = new Text2('Kare', { size: 60, fill: "#fff" }); charBoxLabel.anchor.set(0.5, 0); charBoxLabel.x = charBoxBtn.x; charBoxLabel.y = charBoxBtn.y + 120; var charEllipseLabel = new Text2('Elips', { size: 60, fill: "#fff" }); charEllipseLabel.anchor.set(0.5, 0); charEllipseLabel.x = charEllipseBtn.x; charEllipseLabel.y = charEllipseBtn.y + 120; game.addChild(charBoxBtn); game.addChild(charEllipseBtn); game.addChild(charBoxLabel); game.addChild(charEllipseLabel); infoText.setText('Karakterini Seç!'); // Karakter seçimi eventleri charBoxBtn.down = function (x, y, obj) { selectedType = 'box'; charBoxBtn.scaleX = 1.2; charBoxBtn.scaleY = 1.2; charEllipseBtn.scaleX = 1; charEllipseBtn.scaleY = 1; }; charEllipseBtn.down = function (x, y, obj) { selectedType = 'ellipse'; charEllipseBtn.scaleX = 1.2; charEllipseBtn.scaleY = 1.2; charBoxBtn.scaleX = 1; charBoxBtn.scaleY = 1; }; // Başlat butonu var startBtn = new Text2('Başla', { size: 100, fill: 0x00FF00 }); startBtn.anchor.set(0.5, 0.5); startBtn.x = 2048 / 2; startBtn.y = 2732 / 2 + 300; game.addChild(startBtn); startBtn.down = function (x, y, obj) { isSelectingCharacter = false; // Temizle game.removeChild(charBoxBtn); game.removeChild(charEllipseBtn); game.removeChild(charBoxLabel); game.removeChild(charEllipseLabel); game.removeChild(startBtn); infoText.setText(''); startLevel(1); }; // Seviye başlatma fonksiyonu function startLevel(lvl) { level = lvl; targetsToSpawn = 3 + level * 2; targetsLeft = targetsToSpawn; score = 0; updateLevelText(); updateScoreText(); infoText.setText('Seviye ' + level); // Show level text at the start of each level updateLevelText(); // Karakteri oluştur if (player) { player.destroy(); } player = new PlayerCharacter(); player.setType(selectedType); player.x = 2048 / 2; player.y = 2732 - 350; game.addChild(player); // Hedefleri oluştur for (var i = 0; i < targetsToSpawn; i++) { spawnTarget(); } } // Hedef oluşturma fonksiyonu function spawnTarget() { var t = new Target(); // Sabit hedefler: 3 satır, eşit aralıklı, yukarıdan aşağıya var row = Math.floor(targets.length / 4); var col = targets.length % 4; var marginX = 300; var marginY = 350; var spacingX = (2048 - 2 * marginX) / 3; var spacingY = 250; t.x = marginX + col * spacingX; t.y = marginY + row * spacingY; t.setRandomSpeed(level); targets.push(t); game.addChild(t); } // GUI güncelleme function updateLevelText() { levelText.setText('Seviye: ' + level); } function updateScoreText() { scoreText.setText('Puan: ' + score); } // Oyun bittiğinde veya seviye tamamlandığında gösterilecek buton function showNextButton(text, cb) { if (nextButton) { LK.gui.center.removeChild(nextButton); } nextButton = new Text2(text, { size: 100, fill: 0x00FF00 }); nextButton.anchor.set(0.5, 0.5); LK.gui.center.addChild(nextButton); nextButton.down = function (x, y, obj) { LK.gui.center.removeChild(nextButton); nextButton = null; cb(); }; } // Oyuncu karakterini sürükleme game.down = function (x, y, obj) { if (isSelectingCharacter) return; if (!player) return; // Karaktere tıklanırsa sürükle var local = player.toLocal(game.toGlobal({ x: x, y: y })); if (local.x > -90 && local.x < 90 && local.y > -90 && local.y < 90) { dragNode = player; } }; game.move = function (x, y, obj) { if (isSelectingCharacter) return; if (dragNode) { // Sürüklenen karakteri sınırlar içinde hareket ettir var px = Math.max(90, Math.min(2048 - 90, x)); var py = Math.max(2732 / 2 + 100, Math.min(2732 - 90, y)); dragNode.x = px; dragNode.y = py; } // Silahı fareye/touch'a döndür if (player && player.gun) { // player'ın pozisyonunu globalden al, mouse/touch pozisyonu zaten global var dx = x - player.x; var dy = y - (player.y - 80); // silahın ucu biraz yukarıda player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2; } }; game.up = function (x, y, obj) { dragNode = null; }; // Ekrana dokununca ateş et (mermi fırlat) game.downTarget = function (x, y, obj) { if (isSelectingCharacter) return; if (!player) return; // Sadece oyuncunun üst yarısına dokununca ateş etsin if (y < player.y - 100) { // Silahı ateş edilen noktaya döndür if (player.gun) { var dx = x - player.x; var dy = y - (player.y - 80); player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2; } // Mermi oluştur var bullet = new Bullet(); // Silahın ucunun pozisyonunu hesapla (player.x, player.y - 80 silahın pivot noktası) // Silahın ucunun global pozisyonunu bulmak için trigonometrik olarak hesapla var gunLength = 80; // Silahın uzunluğu (player.gun.height) var gunAngle = player.gun.rotation - Math.PI / 2; // player.gun.rotation = Math.atan2(dy, dx) + Math.PI/2 var gunTipX = player.x + Math.cos(gunAngle) * gunLength; var gunTipY = player.y - 80 + Math.sin(gunAngle) * gunLength; bullet.x = gunTipX; bullet.y = gunTipY; // Mermiye yön ver bullet.speedX = Math.cos(gunAngle) * 50; bullet.speedY = Math.sin(gunAngle) * 50; // Mermiyi döndür (görsel olarak yönüne baksın) bullet.asset.rotation = gunAngle + Math.PI / 2; game.addChild(bullet); if (!game.bullets) game.bullets = []; game.bullets.push(bullet); } }; // Tüm hedefleri temizle function clearTargets() { for (var i = 0; i < targets.length; i++) { targets[i].destroy(); } targets = []; } // Oyun güncelleme game.update = function () { if (isSelectingCharacter) return; // Hedefleri güncelle for (var i = targets.length - 1; i >= 0; i--) { var t = targets[i]; if (t.isHit && t.hitEffect && t.hitEffect.alpha <= 0) { t.destroy(); targets.splice(i, 1); continue; } t.update(); } // Mermileri güncelle if (!game.bullets) game.bullets = []; for (var b = game.bullets.length - 1; b >= 0; b--) { var bullet = game.bullets[b]; bullet.update(); // Ekran dışına çıkan mermiyi sil if (bullet.y < -50) { bullet.destroy(); game.bullets.splice(b, 1); continue; } // Mermi-hedef çarpışması for (var i = targets.length - 1; i >= 0; i--) { var t = targets[i]; if (t.isHit) continue; if (bullet.intersects(t)) { t.hit(); bullet.destroy(); game.bullets.splice(b, 1); score += 10; updateScoreText(); targetsLeft--; if (targetsLeft <= 0) { // Hide level text until next level starts levelText.setText(''); if (level < maxLevel) { infoText.setText('Seviye ' + level + ' Tamamlandı!'); // 'Seviye tamamlandı' yazısını butonun üstünde göstermek için geçici bir Text2 ekle var levelCompleteText = new Text2('Seviye tamamlandı', { size: 90, fill: "#fff" }); levelCompleteText.anchor.set(0.5, 1); // 'Sonraki Seviye' butonunun geleceği y: 1366, 20px üstü: 1346 // Butonun y'si 1366, yazı 20px üstte olacak şekilde ayarlanacak var nextButtonY = 1366; levelCompleteText.x = 1024; levelCompleteText.y = nextButtonY - 20; LK.gui.center.addChild(levelCompleteText); showNextButton('Sonraki Seviye', function () { infoText.setText(''); if (levelCompleteText && levelCompleteText.parent) { LK.gui.center.removeChild(levelCompleteText); levelCompleteText = null; } clearTargets(); startLevel(level + 1); }); // Sonraki Seviye butonunun y'sini 1366 olarak ayarla if (nextButton) { nextButton.y = nextButtonY; } // 5 saniye sonra otomatik olarak sonraki seviyeye geç if (typeof nextLevelTimeout !== "undefined") { LK.clearTimeout(nextLevelTimeout); } nextLevelTimeout = LK.setTimeout(function () { if (nextButton && nextButton.parent) { LK.gui.center.removeChild(nextButton); nextButton = null; } if (levelCompleteText && levelCompleteText.parent) { LK.gui.center.removeChild(levelCompleteText); levelCompleteText = null; } infoText.setText(''); clearTargets(); startLevel(level + 1); }, 5000); } else { infoText.setText('Tebrikler! Tüm seviyeler tamamlandı!'); showNextButton('Tekrar Oyna', function () { infoText.setText(''); clearTargets(); startLevel(1); }); } } break; } } } }; // Tüm ekrana dokunma eventini hedef vurmak için kullan game.on('down', function (x, y, obj) { game.downTarget(x, y, obj); });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Mermi (Bullet) sınıfı
var Bullet = Container.expand(function () {
var self = Container.call(this);
// Mermi asseti olarak 'mermi' görselini kullan
self.asset = self.attachAsset('mermi', {
anchorX: 0.5,
anchorY: 1 // Silah ucundan çıksın
});
self.asset.width = 32;
self.asset.height = 80;
// Mermi yönü ve hızı
self.speedX = 0;
self.speedY = -50; // default yukarı
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
};
return self;
});
// Karakter sınıfı
var PlayerCharacter = Container.expand(function () {
var self = Container.call(this);
self.type = 'box'; // default
self.asset = null;
self.gun = null;
self.setType = function (type) {
self.removeChildren();
self.type = type;
if (type === 'box') {
self.asset = self.attachAsset('charBox', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
self.asset = self.attachAsset('charEllipse', {
anchorX: 0.5,
anchorY: 0.5
});
}
// Add gun asset (simple yellow ellipse as placeholder)
self.gun = self.attachAsset('hitEffect', {
anchorX: 0.5,
anchorY: 1,
x: 0,
y: -80
});
self.gun.width = 40;
self.gun.height = 80;
self.gun.tint = 0xffff00;
};
self.setType('box');
return self;
});
// Hedef (düşman/nesne) sınıfı
var Target = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
self.isHit = false;
self.hitEffect = null;
self.speedY = 0;
self.speedX = 0;
self.setRandomSpeed = function (level) {
// Hedefler sabit, hareket etmeyecek
self.speedY = 0;
self.speedX = 0;
};
self.update = function () {
if (self.isHit) return;
// Sabit hedef, hareket yok
};
self.hit = function () {
if (self.isHit) return;
self.isHit = true;
// Hedefin üzerinde iz bırak
var iz = self.attachAsset('iz', {
anchorX: 0.5,
anchorY: 0.5
});
iz.x = 0;
iz.y = 0;
iz.alpha = 0.8;
iz.width = 60;
iz.height = 60;
// Vuruş efekti
self.hitEffect = self.attachAsset('hitEffect', {
anchorX: 0.5,
anchorY: 0.5
});
self.hitEffect.alpha = 1;
tween(self.hitEffect, {
alpha: 0
}, {
duration: 400,
onFinish: function onFinish() {
self.destroy();
}
});
LK.getSound('hit').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Oyun değişkenleri
// Karakterler için kutu ve elips şeklinde iki farklı karakter
// Hedefler için kırmızı daire
// Vuruş efekti için küçük sarı daire
// Atış efekti için ses
var player = null;
var targets = [];
var level = 1;
var maxLevel = 10;
var targetsToSpawn = 0;
var targetsLeft = 0;
var score = 0;
var isSelectingCharacter = true;
var selectedType = 'box';
var levelText = null;
var scoreText = null;
var infoText = null;
var nextButton = null;
var dragNode = null;
// GUI elemanları
levelText = new Text2('', {
size: 90,
fill: "#fff"
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
scoreText = new Text2('', {
size: 90,
fill: "#fff"
});
// Sola yasla: anchor'ı (0,0) yap ve gui.topLeft'e ekle
scoreText.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreText);
infoText = new Text2('', {
size: 80,
fill: "#fff"
});
infoText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(infoText);
// Karakter seçimi ekranı
var charBoxBtn = LK.getAsset('charBox', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 - 220,
y: 2732 / 2 - 100
});
var charEllipseBtn = LK.getAsset('charEllipse', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 220,
y: 2732 / 2 - 100
});
var charBoxLabel = new Text2('Kare', {
size: 60,
fill: "#fff"
});
charBoxLabel.anchor.set(0.5, 0);
charBoxLabel.x = charBoxBtn.x;
charBoxLabel.y = charBoxBtn.y + 120;
var charEllipseLabel = new Text2('Elips', {
size: 60,
fill: "#fff"
});
charEllipseLabel.anchor.set(0.5, 0);
charEllipseLabel.x = charEllipseBtn.x;
charEllipseLabel.y = charEllipseBtn.y + 120;
game.addChild(charBoxBtn);
game.addChild(charEllipseBtn);
game.addChild(charBoxLabel);
game.addChild(charEllipseLabel);
infoText.setText('Karakterini Seç!');
// Karakter seçimi eventleri
charBoxBtn.down = function (x, y, obj) {
selectedType = 'box';
charBoxBtn.scaleX = 1.2;
charBoxBtn.scaleY = 1.2;
charEllipseBtn.scaleX = 1;
charEllipseBtn.scaleY = 1;
};
charEllipseBtn.down = function (x, y, obj) {
selectedType = 'ellipse';
charEllipseBtn.scaleX = 1.2;
charEllipseBtn.scaleY = 1.2;
charBoxBtn.scaleX = 1;
charBoxBtn.scaleY = 1;
};
// Başlat butonu
var startBtn = new Text2('Başla', {
size: 100,
fill: 0x00FF00
});
startBtn.anchor.set(0.5, 0.5);
startBtn.x = 2048 / 2;
startBtn.y = 2732 / 2 + 300;
game.addChild(startBtn);
startBtn.down = function (x, y, obj) {
isSelectingCharacter = false;
// Temizle
game.removeChild(charBoxBtn);
game.removeChild(charEllipseBtn);
game.removeChild(charBoxLabel);
game.removeChild(charEllipseLabel);
game.removeChild(startBtn);
infoText.setText('');
startLevel(1);
};
// Seviye başlatma fonksiyonu
function startLevel(lvl) {
level = lvl;
targetsToSpawn = 3 + level * 2;
targetsLeft = targetsToSpawn;
score = 0;
updateLevelText();
updateScoreText();
infoText.setText('Seviye ' + level);
// Show level text at the start of each level
updateLevelText();
// Karakteri oluştur
if (player) {
player.destroy();
}
player = new PlayerCharacter();
player.setType(selectedType);
player.x = 2048 / 2;
player.y = 2732 - 350;
game.addChild(player);
// Hedefleri oluştur
for (var i = 0; i < targetsToSpawn; i++) {
spawnTarget();
}
}
// Hedef oluşturma fonksiyonu
function spawnTarget() {
var t = new Target();
// Sabit hedefler: 3 satır, eşit aralıklı, yukarıdan aşağıya
var row = Math.floor(targets.length / 4);
var col = targets.length % 4;
var marginX = 300;
var marginY = 350;
var spacingX = (2048 - 2 * marginX) / 3;
var spacingY = 250;
t.x = marginX + col * spacingX;
t.y = marginY + row * spacingY;
t.setRandomSpeed(level);
targets.push(t);
game.addChild(t);
}
// GUI güncelleme
function updateLevelText() {
levelText.setText('Seviye: ' + level);
}
function updateScoreText() {
scoreText.setText('Puan: ' + score);
}
// Oyun bittiğinde veya seviye tamamlandığında gösterilecek buton
function showNextButton(text, cb) {
if (nextButton) {
LK.gui.center.removeChild(nextButton);
}
nextButton = new Text2(text, {
size: 100,
fill: 0x00FF00
});
nextButton.anchor.set(0.5, 0.5);
LK.gui.center.addChild(nextButton);
nextButton.down = function (x, y, obj) {
LK.gui.center.removeChild(nextButton);
nextButton = null;
cb();
};
}
// Oyuncu karakterini sürükleme
game.down = function (x, y, obj) {
if (isSelectingCharacter) return;
if (!player) return;
// Karaktere tıklanırsa sürükle
var local = player.toLocal(game.toGlobal({
x: x,
y: y
}));
if (local.x > -90 && local.x < 90 && local.y > -90 && local.y < 90) {
dragNode = player;
}
};
game.move = function (x, y, obj) {
if (isSelectingCharacter) return;
if (dragNode) {
// Sürüklenen karakteri sınırlar içinde hareket ettir
var px = Math.max(90, Math.min(2048 - 90, x));
var py = Math.max(2732 / 2 + 100, Math.min(2732 - 90, y));
dragNode.x = px;
dragNode.y = py;
}
// Silahı fareye/touch'a döndür
if (player && player.gun) {
// player'ın pozisyonunu globalden al, mouse/touch pozisyonu zaten global
var dx = x - player.x;
var dy = y - (player.y - 80); // silahın ucu biraz yukarıda
player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Ekrana dokununca ateş et (mermi fırlat)
game.downTarget = function (x, y, obj) {
if (isSelectingCharacter) return;
if (!player) return;
// Sadece oyuncunun üst yarısına dokununca ateş etsin
if (y < player.y - 100) {
// Silahı ateş edilen noktaya döndür
if (player.gun) {
var dx = x - player.x;
var dy = y - (player.y - 80);
player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2;
}
// Mermi oluştur
var bullet = new Bullet();
// Silahın ucunun pozisyonunu hesapla (player.x, player.y - 80 silahın pivot noktası)
// Silahın ucunun global pozisyonunu bulmak için trigonometrik olarak hesapla
var gunLength = 80; // Silahın uzunluğu (player.gun.height)
var gunAngle = player.gun.rotation - Math.PI / 2; // player.gun.rotation = Math.atan2(dy, dx) + Math.PI/2
var gunTipX = player.x + Math.cos(gunAngle) * gunLength;
var gunTipY = player.y - 80 + Math.sin(gunAngle) * gunLength;
bullet.x = gunTipX;
bullet.y = gunTipY;
// Mermiye yön ver
bullet.speedX = Math.cos(gunAngle) * 50;
bullet.speedY = Math.sin(gunAngle) * 50;
// Mermiyi döndür (görsel olarak yönüne baksın)
bullet.asset.rotation = gunAngle + Math.PI / 2;
game.addChild(bullet);
if (!game.bullets) game.bullets = [];
game.bullets.push(bullet);
}
};
// Tüm hedefleri temizle
function clearTargets() {
for (var i = 0; i < targets.length; i++) {
targets[i].destroy();
}
targets = [];
}
// Oyun güncelleme
game.update = function () {
if (isSelectingCharacter) return;
// Hedefleri güncelle
for (var i = targets.length - 1; i >= 0; i--) {
var t = targets[i];
if (t.isHit && t.hitEffect && t.hitEffect.alpha <= 0) {
t.destroy();
targets.splice(i, 1);
continue;
}
t.update();
}
// Mermileri güncelle
if (!game.bullets) game.bullets = [];
for (var b = game.bullets.length - 1; b >= 0; b--) {
var bullet = game.bullets[b];
bullet.update();
// Ekran dışına çıkan mermiyi sil
if (bullet.y < -50) {
bullet.destroy();
game.bullets.splice(b, 1);
continue;
}
// Mermi-hedef çarpışması
for (var i = targets.length - 1; i >= 0; i--) {
var t = targets[i];
if (t.isHit) continue;
if (bullet.intersects(t)) {
t.hit();
bullet.destroy();
game.bullets.splice(b, 1);
score += 10;
updateScoreText();
targetsLeft--;
if (targetsLeft <= 0) {
// Hide level text until next level starts
levelText.setText('');
if (level < maxLevel) {
infoText.setText('Seviye ' + level + ' Tamamlandı!');
// 'Seviye tamamlandı' yazısını butonun üstünde göstermek için geçici bir Text2 ekle
var levelCompleteText = new Text2('Seviye tamamlandı', {
size: 90,
fill: "#fff"
});
levelCompleteText.anchor.set(0.5, 1);
// 'Sonraki Seviye' butonunun geleceği y: 1366, 20px üstü: 1346
// Butonun y'si 1366, yazı 20px üstte olacak şekilde ayarlanacak
var nextButtonY = 1366;
levelCompleteText.x = 1024;
levelCompleteText.y = nextButtonY - 20;
LK.gui.center.addChild(levelCompleteText);
showNextButton('Sonraki Seviye', function () {
infoText.setText('');
if (levelCompleteText && levelCompleteText.parent) {
LK.gui.center.removeChild(levelCompleteText);
levelCompleteText = null;
}
clearTargets();
startLevel(level + 1);
});
// Sonraki Seviye butonunun y'sini 1366 olarak ayarla
if (nextButton) {
nextButton.y = nextButtonY;
}
// 5 saniye sonra otomatik olarak sonraki seviyeye geç
if (typeof nextLevelTimeout !== "undefined") {
LK.clearTimeout(nextLevelTimeout);
}
nextLevelTimeout = LK.setTimeout(function () {
if (nextButton && nextButton.parent) {
LK.gui.center.removeChild(nextButton);
nextButton = null;
}
if (levelCompleteText && levelCompleteText.parent) {
LK.gui.center.removeChild(levelCompleteText);
levelCompleteText = null;
}
infoText.setText('');
clearTargets();
startLevel(level + 1);
}, 5000);
} else {
infoText.setText('Tebrikler! Tüm seviyeler tamamlandı!');
showNextButton('Tekrar Oyna', function () {
infoText.setText('');
clearTargets();
startLevel(1);
});
}
}
break;
}
}
}
};
// Tüm ekrana dokunma eventini hedef vurmak için kullan
game.on('down', function (x, y, obj) {
game.downTarget(x, y, obj);
});