User prompt
Please fix the bug: 'TypeError: LK.effects.shakeScreen is not a function' in or related to this line: 'LK.effects.shakeScreen(400, 12);' Line Number: 454
User prompt
Please fix the bug: 'TypeError: LK.effects.explosion is not a function' in or related to this line: 'LK.effects.explosion(e.x, e.y, {' Line Number: 452
User prompt
bullet is not defined
User prompt
Hatayı çöz
User prompt
Please fix the bug: 'ReferenceError: Bullet is not defined' in or related to this line: 'var b = new Bullet(angle);' Line Number: 187
User prompt
Mermi izi ekle
User prompt
Ekran sarsıntısı ekle
User prompt
Patlama efekti ekle
User prompt
Farklı güçlendirmeler ekle
User prompt
Boss ekle her 5 dalga da özel olarak gelsin
User prompt
Oyunda 5 canımız olsun
User prompt
kodları hazırla
User prompt
Çok hızlı ateş ediyoruz güçlendirme aldıkça daha hız ateş edelim
User prompt
Meteorları asset olarak ekle
User prompt
Meteorlar da üstüme gelsin onlardan kaçalım
User prompt
Düşman bize doğru değil kendi düz çizgisine doğru ateş etsin
User prompt
düşmanda bize ateş etsin
User prompt
Hareket edemiyorum bu sorunu çöz
User prompt
Arka planda yıldızlar falan parıldayıp sönsün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Arka plana uzay teması ekle
User prompt
var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); şu iki kodun yanında ünlem var bu sorunu çöz ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
User prompt
düşmanda bize ateş etsin
User prompt
var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); şu iki hatayı çöz ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
plugins failed to load hatasını çöz
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Mermi
var Bullet = Container.expand(function (angle) {
var self = Container.call(this);
var bulletGfx = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bulletGfx.width / 2;
self.speed = 28;
self.angle = angle || -Math.PI / 2;
self.update = function () {
self.x += Math.cos(self.angle) * self.speed;
self.y += Math.sin(self.angle) * self.speed;
};
return self;
});
// Düşman
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 / 2;
self.speed = 2 + currentWave * 0.3 + Math.random() * 1.5;
self.hp = 1 + Math.floor(currentWave / 2);
self.dir = Math.PI / 2 + (Math.random() - 0.5) * 0.3; // Hafifçe sağa-sola sapabilir
self.shootCooldown = 30 + Math.floor(Math.random() * 60); // Her düşman için rastgele başlat
self.update = function () {
self.y += self.speed;
self.x += Math.sin(self.dir) * 2;
// Ateş etme
if (self.shootCooldown > 0) {
self.shootCooldown--;
} else {
// Kendi düz çizgisine doğru ateş et
var angle = Math.PI / 2; // Düz aşağıya (ekranın altına) ateş etsin
var eb = new EnemyBullet(angle);
eb.x = self.x;
eb.y = self.y + self.radius;
enemyBullets.push(eb);
game.addChild(eb);
self.shootCooldown = 60 + Math.floor(Math.random() * 60); // 1-2 saniyede bir ateş
}
};
self.hit = function () {
self.hp--;
LK.effects.flashObject(self, 0xffffff, 200);
if (self.hp <= 0) {
self.destroy();
return true;
}
return false;
};
return self;
});
// Düşman mermisi
var EnemyBullet = Container.expand(function (angle) {
var self = Container.call(this);
var bulletGfx = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
bulletGfx.tint = 0xff3333; // Kırmızıya yakın renk
self.radius = bulletGfx.width / 2;
self.speed = 18;
self.angle = angle || Math.PI / 2;
self.update = function () {
self.x += Math.cos(self.angle) * self.speed;
self.y += Math.sin(self.angle) * self.speed;
};
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 / 2;
self.fireCooldown = 0; // Atış bekleme süresi
self.fireRate = 18; // Kaç frame'de bir ateş eder (60fps'de ~3 atış/sn)
self.powerLevel = 1; // Güç seviyesi (daha fazla mermi için)
self.invincible = false;
self.invincibleTimer = 0;
self.update = function () {
if (self.fireCooldown > 0) {
self.fireCooldown--;
}
if (self.invincible) {
self.invincibleTimer--;
if (self.invincibleTimer <= 0) {
self.invincible = false;
playerGfx.alpha = 1;
}
}
};
self.shoot = function () {
if (self.fireCooldown > 0) {
return;
}
self.fireCooldown = self.fireRate;
// Güç seviyesine göre mermi sayısı
var spread = self.powerLevel;
var angleStep = Math.PI / 16;
var baseAngle = -Math.PI / 2;
for (var i = 0; i < spread; i++) {
var angle = baseAngle + (i - (spread - 1) / 2) * angleStep;
var b = new Bullet(angle);
b.x = self.x;
b.y = self.y - self.radius;
bullets.push(b);
game.addChild(b);
}
};
self.gainPower = function () {
if (self.powerLevel < 3) {
self.powerLevel++;
LK.effects.flashObject(self, 0x2980b9, 600);
// Ateş hızını artır: fireRate'i azalt, minimum 6 frame/sn'ye kadar düşebilir
self.fireRate = Math.max(6, self.fireRate - 4);
}
};
self.hit = function () {
if (self.invincible) {
return;
}
self.invincible = true;
self.invincibleTimer = 90; // 1.5 saniye
playerGfx.alpha = 0.5;
LK.effects.flashScreen(0xff0000, 500);
playerLives--;
livesText.setText('♥'.repeat(playerLives));
if (playerLives <= 0) {
LK.showGameOver();
}
};
return self;
});
// Güçlendirme
var PowerUp = Container.expand(function () {
var self = Container.call(this);
// Power-up türünü rastgele seç
var types = ['shield', 'speed', 'bomb', 'power'];
// 'power' = eski güçlendirme (ateş gücü)
var r = Math.random();
if (r < 0.25) self.type = 'shield';else if (r < 0.5) self.type = 'speed';else if (r < 0.7) self.type = 'bomb';else self.type = 'power';
var puGfx = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = puGfx.width / 2;
self.speed = 6;
// Farklı türler için renk değiştir
if (self.type === 'shield') puGfx.tint = 0x00bfff; // Mavi
else if (self.type === 'speed') puGfx.tint = 0x2ecc40; // Yeşil
else if (self.type === 'bomb') puGfx.tint = 0xffa500; // Turuncu
else puGfx.tint = 0xf1c40f; // Sarı (ateş gücü)
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222831
});
/****
* Game Code
****/
// Global değişkenler
// Karakter, düşman, mermi ve güçlendirme için temel şekiller
if (!tween) {
console.error("Tween plugin failed to load!");
}
if (!storage) {
console.error("Storage plugin failed to load!");
}
var player;
var bullets = [];
var enemyBullets = [];
var enemies = [];
var powerups = [];
var currentWave = 1;
var waveEnemiesLeft = 0;
var waveSpawnTimer = 0;
var playerLives = 3;
var score = 0;
var dragNode = null;
// GUI: Skor ve can
var scoreText = new Text2('0', {
size: 100,
fill: 0xFFF700
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var livesText = new Text2('♥♥♥', {
size: 90,
fill: 0xE74C3C
});
livesText.anchor.set(0.5, 0);
LK.gui.topRight.addChild(livesText);
// Dalga göstergesi
var waveText = new Text2('Dalga 1', {
size: 70,
fill: 0x00BFFF
});
waveText.anchor.set(0.5, 0);
LK.gui.bottom.addChild(waveText);
// Oyuncu oluştur
player = new Player();
player.x = 2048 / 2;
player.y = 2732 - 350;
game.addChild(player);
// İlk dalgayı başlat
startWave(currentWave);
// Sürükleme/move kontrolleri
function handleMove(x, y, obj) {
if (dragNode) {
// Sınırları kontrol et
var px = Math.max(80, Math.min(2048 - 80, x));
var py = Math.max(200, Math.min(2732 - 120, y));
dragNode.x = px;
dragNode.y = py;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Oyuncuya tıklanırsa sürüklemeye başla
if (player && Math.abs(x - player.x) < player.radius && Math.abs(y - player.y) < player.radius) {
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Dalga başlatıcı
function startWave(wave) {
waveEnemiesLeft = 6 + wave * 2;
waveSpawnTimer = 0;
waveText.setText('Dalga ' + wave);
}
// Düşman üretici
function spawnEnemy() {
var e = new Enemy();
e.x = 150 + Math.random() * (2048 - 300);
e.y = -100;
enemies.push(e);
game.addChild(e);
}
// Güçlendirme üretici
function spawnPowerUp() {
var pu = new PowerUp();
pu.x = 200 + Math.random() * (2048 - 400);
pu.y = -80;
powerups.push(pu);
game.addChild(pu);
}
// Ana oyun döngüsü
game.update = function () {
// Oyuncu update
player.update();
// Hız artışı aktifse timer'ı azalt
if (player._speedBoostUpdate) {
player._speedBoostUpdate();
}
// Otomatik ateş
player.shoot();
// Mermiler
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
// Ekran dışıysa sil
if (b.y < -60 || b.x < -60 || b.x > 2048 + 60) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Düşman çarpışması
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
if (e.hit()) {
// Düşman öldü
score += 10 * currentWave;
scoreText.setText(score);
LK.setScore(score);
enemies.splice(j, 1);
waveEnemiesLeft--;
// Güçlendirme düşürme şansı
if (Math.random() < 0.12) {
spawnPowerUp();
}
}
b.destroy();
bullets.splice(i, 1);
break;
}
}
}
// Düşman mermileri
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var eb = enemyBullets[i];
eb.update();
// Ekran dışıysa sil
if (eb.y < -60 || eb.y > 2732 + 60 || eb.x < -60 || eb.x > 2048 + 60) {
eb.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Oyuncuya çarpışma
if (eb.intersects(player)) {
eb.destroy();
enemyBullets.splice(i, 1);
player.hit();
continue;
}
}
// Düşmanlar
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
// Ekran dışıysa sil
if (e.y > 2732 + 100) {
e.destroy();
enemies.splice(i, 1);
waveEnemiesLeft--;
continue;
}
// Oyuncu çarpışması
if (e.intersects(player)) {
e.destroy();
enemies.splice(i, 1);
waveEnemiesLeft--;
player.hit();
continue;
}
}
// Güçlendirmeler
for (var i = powerups.length - 1; i >= 0; i--) {
var pu = powerups[i];
pu.update();
if (pu.y > 2732 + 80) {
pu.destroy();
powerups.splice(i, 1);
continue;
}
if (pu.intersects(player)) {
// Power-up türüne göre farklı etki
if (pu.type === 'power') {
player.gainPower();
} else if (pu.type === 'shield') {
// 3 saniye dokunulmazlık
player.invincible = true;
player.invincibleTimer = 180;
player.children[0].alpha = 0.5;
// Etrafında mavi bir halka göstermek için efekt
LK.effects.flashObject(player, 0x00bfff, 600);
} else if (pu.type === 'speed') {
// 3 saniye boyunca hareket hızını artır
if (!player._origSpeedBoost) {
player._origSpeedBoost = true;
player._origMoveHandler = handleMove;
player._speedBoostTimer = 180;
// Hızlı hareket için yeni move fonksiyonu
handleMove = function handleMove(x, y, obj) {
if (dragNode) {
// Sınırları kontrol et
var px = Math.max(80, Math.min(2048 - 80, x));
var py = Math.max(200, Math.min(2732 - 120, y));
// Hızlıca yaklaş
dragNode.x += (px - dragNode.x) * 0.5;
dragNode.y += (py - dragNode.y) * 0.5;
}
};
// Timer'ı update döngüsünde azalt
player._speedBoostUpdate = function () {
player._speedBoostTimer--;
if (player._speedBoostTimer <= 0) {
handleMove = player._origMoveHandler;
delete player._origSpeedBoost;
delete player._speedBoostTimer;
delete player._speedBoostUpdate;
}
};
} else {
// Zaten aktifse süresini uzat
player._speedBoostTimer = 180;
}
LK.effects.flashObject(player, 0x2ecc40, 600);
} else if (pu.type === 'bomb') {
// Ekrandaki tüm düşmanları ve düşman mermilerini yok et
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].destroy();
enemies.splice(j, 1);
waveEnemiesLeft--;
score += 10 * currentWave;
}
for (var j = enemyBullets.length - 1; j >= 0; j--) {
enemyBullets[j].destroy();
enemyBullets.splice(j, 1);
}
scoreText.setText(score);
LK.setScore(score);
LK.effects.flashScreen(0xffa500, 400);
}
pu.destroy();
powerups.splice(i, 1);
continue;
}
}
// Dalga yönetimi
if (waveEnemiesLeft <= 0 && enemies.length === 0) {
currentWave++;
startWave(currentWave);
}
// Düşman üretimi
if (waveEnemiesLeft > 0) {
waveSpawnTimer--;
if (waveSpawnTimer <= 0) {
spawnEnemy();
waveEnemiesLeft--;
waveSpawnTimer = Math.max(18, 60 - currentWave * 2); // Dalga arttıkça daha hızlı
}
}
};
// Oyun başında skor ve canı sıfırla
score = 0;
LK.setScore(0);
playerLives = 3;
livesText.setText('♥'.repeat(playerLives));
scoreText.setText(score);
currentWave = 1;
waveText.setText('Dalga 1'); ===================================================================
--- original.js
+++ change.js
@@ -149,14 +149,24 @@
});
// Güçlendirme
var PowerUp = Container.expand(function () {
var self = Container.call(this);
+ // Power-up türünü rastgele seç
+ var types = ['shield', 'speed', 'bomb', 'power'];
+ // 'power' = eski güçlendirme (ateş gücü)
+ var r = Math.random();
+ if (r < 0.25) self.type = 'shield';else if (r < 0.5) self.type = 'speed';else if (r < 0.7) self.type = 'bomb';else self.type = 'power';
var puGfx = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = puGfx.width / 2;
self.speed = 6;
+ // Farklı türler için renk değiştir
+ if (self.type === 'shield') puGfx.tint = 0x00bfff; // Mavi
+ else if (self.type === 'speed') puGfx.tint = 0x2ecc40; // Yeşil
+ else if (self.type === 'bomb') puGfx.tint = 0xffa500; // Turuncu
+ else puGfx.tint = 0xf1c40f; // Sarı (ateş gücü)
self.update = function () {
self.y += self.speed;
};
return self;
@@ -171,10 +181,10 @@
/****
* Game Code
****/
-// Karakter, düşman, mermi ve güçlendirme için temel şekiller
// Global değişkenler
+// Karakter, düşman, mermi ve güçlendirme için temel şekiller
if (!tween) {
console.error("Tween plugin failed to load!");
}
if (!storage) {
@@ -264,8 +274,12 @@
// Ana oyun döngüsü
game.update = function () {
// Oyuncu update
player.update();
+ // Hız artışı aktifse timer'ı azalt
+ if (player._speedBoostUpdate) {
+ player._speedBoostUpdate();
+ }
// Otomatik ateş
player.shoot();
// Mermiler
for (var i = bullets.length - 1; i >= 0; i--) {
@@ -346,9 +360,66 @@
powerups.splice(i, 1);
continue;
}
if (pu.intersects(player)) {
- player.gainPower();
+ // Power-up türüne göre farklı etki
+ if (pu.type === 'power') {
+ player.gainPower();
+ } else if (pu.type === 'shield') {
+ // 3 saniye dokunulmazlık
+ player.invincible = true;
+ player.invincibleTimer = 180;
+ player.children[0].alpha = 0.5;
+ // Etrafında mavi bir halka göstermek için efekt
+ LK.effects.flashObject(player, 0x00bfff, 600);
+ } else if (pu.type === 'speed') {
+ // 3 saniye boyunca hareket hızını artır
+ if (!player._origSpeedBoost) {
+ player._origSpeedBoost = true;
+ player._origMoveHandler = handleMove;
+ player._speedBoostTimer = 180;
+ // Hızlı hareket için yeni move fonksiyonu
+ handleMove = function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Sınırları kontrol et
+ var px = Math.max(80, Math.min(2048 - 80, x));
+ var py = Math.max(200, Math.min(2732 - 120, y));
+ // Hızlıca yaklaş
+ dragNode.x += (px - dragNode.x) * 0.5;
+ dragNode.y += (py - dragNode.y) * 0.5;
+ }
+ };
+ // Timer'ı update döngüsünde azalt
+ player._speedBoostUpdate = function () {
+ player._speedBoostTimer--;
+ if (player._speedBoostTimer <= 0) {
+ handleMove = player._origMoveHandler;
+ delete player._origSpeedBoost;
+ delete player._speedBoostTimer;
+ delete player._speedBoostUpdate;
+ }
+ };
+ } else {
+ // Zaten aktifse süresini uzat
+ player._speedBoostTimer = 180;
+ }
+ LK.effects.flashObject(player, 0x2ecc40, 600);
+ } else if (pu.type === 'bomb') {
+ // Ekrandaki tüm düşmanları ve düşman mermilerini yok et
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ enemies[j].destroy();
+ enemies.splice(j, 1);
+ waveEnemiesLeft--;
+ score += 10 * currentWave;
+ }
+ for (var j = enemyBullets.length - 1; j >= 0; j--) {
+ enemyBullets[j].destroy();
+ enemyBullets.splice(j, 1);
+ }
+ scoreText.setText(score);
+ LK.setScore(score);
+ LK.effects.flashScreen(0xffa500, 400);
+ }
pu.destroy();
powerups.splice(i, 1);
continue;
}
2d spaceship beatifull. In-Game asset. 2d. High contrast. No shadows
Yukarı doğru 3 ok upgrade. In-Game asset. 2d. High contrast. No shadows
2d bullet. In-Game asset. 2d. High contrast. No shadows
Meteor 2d. In-Game asset. 2d. High contrast. No shadows
2d enemy spaceship arka plana uyumlu olsun. In-Game asset. 2d. High contrast. No shadows
2d enemy boss spaceship. In-Game asset. 2d. High contrast. No shadows