User prompt
centercircle'daki knob hangi yöne doğru gidiyorsa karakterin oraya kadar her zaman gitmesini sağla şuan shadow karakteri biraz takılıyor gibi gözüküyor.
User prompt
centercircle büyüdü fakat içindeki knob yeterince haraket edemiyor
User prompt
centercicle'ı 2 katı büyüt
User prompt
karakterin ekranın herhangi bir yerine tıklayınca ortaya çıkan bir karakter yürütme alanı ve imleciyle harake ettirilsin
User prompt
agent shadow ekranın herhangi bir yerine dokunulduğunda ortaya çıkan sürüklenebilir bir panel ile yürütülebilsin dokunduğumuz yere ışınlanıyor şuan karakter bunun olmaması gerek
Code edit (1 edits merged)
Please save this source code
User prompt
Agent Shadow: Işık Kaçışı
Initial prompt
agent shadow 2d bir beceri oyunudur. karakter karaktere basılı tutarak haraket ettirilir. karakterimiz bir gölge şeklindeki insandır. ve amacı etraftan gelen ışık mermilerinden kaçması gerekiyor.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Işık mermisi sınıfı
var LightBullet = Container.expand(function () {
var self = Container.call(this);
var bulletAsset = self.attachAsset('lightBullet', {
anchorX: 0.5,
anchorY: 0.5
});
// Rastgele bir hız ve yön atanacak
self.speedX = 0;
self.speedY = 0;
// Sonraki çarpışma kontrolü için
self.lastIntersecting = false;
// Her frame pozisyon güncelle
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
};
// Mermi ekran dışında mı?
self.isOutOfBounds = function () {
return self.x < -bulletAsset.width || self.x > 2048 + bulletAsset.width || self.y < -bulletAsset.height || self.y > 2732 + bulletAsset.height;
};
return self;
});
// Shadow karakter sınıfı
var Shadow = Container.expand(function () {
var self = Container.call(this);
var shadowAsset = self.attachAsset('shadow', {
anchorX: 0.5,
anchorY: 0.5
});
// Karakterin merkezini kolayca almak için
self.getRadius = function () {
return Math.max(shadowAsset.width, shadowAsset.height) * 0.5;
};
// Sürükleme için down/up eventleri
self.down = function (x, y, obj) {};
self.up = function (x, y, obj) {};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181a1b
});
/****
* Game Code
****/
// Işık mermisi (light bullet)
// Gölge karakter (shadow agent)
// Oyun alanı boyutları
var GAME_W = 2048;
var GAME_H = 2732;
// Karakteri oluştur ve ortala
var shadow = new Shadow();
shadow.x = GAME_W / 2;
shadow.y = GAME_H * 0.8;
game.addChild(shadow);
// Mermileri tutan dizi
var bullets = [];
// Skor
var score = 0;
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Sürükleme için
var dragNode = null;
// Oyun başladı mı?
var isGameActive = true;
// Mermi oluşturma aralığı (ms cinsinden)
var bulletInterval = 700;
var bulletTimer = null;
// Mermi oluşturma fonksiyonu
function spawnBullet() {
// Merminin çıkacağı kenarı rastgele seç (üst, alt, sol, sağ)
var edge = Math.floor(Math.random() * 4);
var bullet = new LightBullet();
var angle, startX, startY, targetX, targetY, speed;
// Hedef karakterin anlık pozisyonu
targetX = shadow.x;
targetY = shadow.y;
// Kenara göre başlangıç pozisyonu ve yönü belirle
if (edge === 0) {
// üst
startX = Math.random() * GAME_W;
startY = -bullet.height;
} else if (edge === 1) {
// sağ
startX = GAME_W + bullet.width;
startY = Math.random() * GAME_H;
} else if (edge === 2) {
// alt
startX = Math.random() * GAME_W;
startY = GAME_H + bullet.height;
} else {
// sol
startX = -bullet.width;
startY = Math.random() * GAME_H;
}
// Hedefe doğru vektör
var dx = targetX - startX;
var dy = targetY - startY;
angle = Math.atan2(dy, dx);
// Hız (her mermi için rastgele küçük bir varyasyon)
speed = 13 + Math.random() * 5;
bullet.x = startX;
bullet.y = startY;
bullet.speedX = Math.cos(angle) * speed;
bullet.speedY = Math.sin(angle) * speed;
bullets.push(bullet);
game.addChild(bullet);
}
// Mermi oluşturma zamanlayıcısı başlat
function startBulletTimer() {
if (bulletTimer) LK.clearInterval(bulletTimer);
bulletTimer = LK.setInterval(function () {
if (isGameActive) spawnBullet();
}, bulletInterval);
}
startBulletTimer();
// Skoru güncelle
function updateScore(val) {
score = val;
scoreTxt.setText(score);
}
// Oyun bittiğinde
function gameOver() {
isGameActive = false;
// Ekranı kırmızıya flashla
LK.effects.flashScreen(0xff2222, 800);
// Oyun bitişini göster
LK.showGameOver();
}
// Sürükleme işlemleri
function handleMove(x, y, obj) {
if (!isGameActive) return;
if (dragNode) {
// Karakteri parmağın olduğu yere taşı
dragNode.x = x;
dragNode.y = y;
// Kenarlara taşmasını engelle
var r = dragNode.getRadius();
if (dragNode.x < r) dragNode.x = r;
if (dragNode.x > GAME_W - r) dragNode.x = GAME_W - r;
if (dragNode.y < r) dragNode.y = r;
if (dragNode.y > GAME_H - r) dragNode.y = GAME_H - r;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
if (!isGameActive) return;
// Karaktere tıklanmasa bile sürüklemeye başla
dragNode = shadow;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Oyun güncelleme döngüsü
game.update = function () {
if (!isGameActive) return;
// Mermileri güncelle
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
// Ekran dışına çıkan mermileri sil
if (b.isOutOfBounds()) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Çarpışma kontrolü
var intersecting = b.intersects(shadow);
if (!b.lastIntersecting && intersecting) {
// Oyun biter
gameOver();
return;
}
b.lastIntersecting = intersecting;
}
// Skoru güncelle (hayatta kalma süresi)
if (LK.ticks % 30 === 0) {
updateScore(score + 1);
}
};
// Oyun yeniden başladığında sıfırla
game.on('reset', function () {
// Mermileri temizle
for (var i = 0; i < bullets.length; i++) {
bullets[i].destroy();
}
bullets = [];
// Skoru sıfırla
updateScore(0);
// Karakteri ortaya al
shadow.x = GAME_W / 2;
shadow.y = GAME_H * 0.8;
isGameActive = true;
startBulletTimer();
}); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,213 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Işık mermisi sınıfı
+var LightBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletAsset = self.attachAsset('lightBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Rastgele bir hız ve yön atanacak
+ self.speedX = 0;
+ self.speedY = 0;
+ // Sonraki çarpışma kontrolü için
+ self.lastIntersecting = false;
+ // Her frame pozisyon güncelle
+ self.update = function () {
+ self.x += self.speedX;
+ self.y += self.speedY;
+ };
+ // Mermi ekran dışında mı?
+ self.isOutOfBounds = function () {
+ return self.x < -bulletAsset.width || self.x > 2048 + bulletAsset.width || self.y < -bulletAsset.height || self.y > 2732 + bulletAsset.height;
+ };
+ return self;
+});
+// Shadow karakter sınıfı
+var Shadow = Container.expand(function () {
+ var self = Container.call(this);
+ var shadowAsset = self.attachAsset('shadow', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Karakterin merkezini kolayca almak için
+ self.getRadius = function () {
+ return Math.max(shadowAsset.width, shadowAsset.height) * 0.5;
+ };
+ // Sürükleme için down/up eventleri
+ self.down = function (x, y, obj) {};
+ self.up = function (x, y, obj) {};
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
+ backgroundColor: 0x181a1b
+});
+
+/****
+* Game Code
+****/
+// Işık mermisi (light bullet)
+// Gölge karakter (shadow agent)
+// Oyun alanı boyutları
+var GAME_W = 2048;
+var GAME_H = 2732;
+// Karakteri oluştur ve ortala
+var shadow = new Shadow();
+shadow.x = GAME_W / 2;
+shadow.y = GAME_H * 0.8;
+game.addChild(shadow);
+// Mermileri tutan dizi
+var bullets = [];
+// Skor
+var score = 0;
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: "#fff"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Sürükleme için
+var dragNode = null;
+// Oyun başladı mı?
+var isGameActive = true;
+// Mermi oluşturma aralığı (ms cinsinden)
+var bulletInterval = 700;
+var bulletTimer = null;
+// Mermi oluşturma fonksiyonu
+function spawnBullet() {
+ // Merminin çıkacağı kenarı rastgele seç (üst, alt, sol, sağ)
+ var edge = Math.floor(Math.random() * 4);
+ var bullet = new LightBullet();
+ var angle, startX, startY, targetX, targetY, speed;
+ // Hedef karakterin anlık pozisyonu
+ targetX = shadow.x;
+ targetY = shadow.y;
+ // Kenara göre başlangıç pozisyonu ve yönü belirle
+ if (edge === 0) {
+ // üst
+ startX = Math.random() * GAME_W;
+ startY = -bullet.height;
+ } else if (edge === 1) {
+ // sağ
+ startX = GAME_W + bullet.width;
+ startY = Math.random() * GAME_H;
+ } else if (edge === 2) {
+ // alt
+ startX = Math.random() * GAME_W;
+ startY = GAME_H + bullet.height;
+ } else {
+ // sol
+ startX = -bullet.width;
+ startY = Math.random() * GAME_H;
+ }
+ // Hedefe doğru vektör
+ var dx = targetX - startX;
+ var dy = targetY - startY;
+ angle = Math.atan2(dy, dx);
+ // Hız (her mermi için rastgele küçük bir varyasyon)
+ speed = 13 + Math.random() * 5;
+ bullet.x = startX;
+ bullet.y = startY;
+ bullet.speedX = Math.cos(angle) * speed;
+ bullet.speedY = Math.sin(angle) * speed;
+ bullets.push(bullet);
+ game.addChild(bullet);
+}
+// Mermi oluşturma zamanlayıcısı başlat
+function startBulletTimer() {
+ if (bulletTimer) LK.clearInterval(bulletTimer);
+ bulletTimer = LK.setInterval(function () {
+ if (isGameActive) spawnBullet();
+ }, bulletInterval);
+}
+startBulletTimer();
+// Skoru güncelle
+function updateScore(val) {
+ score = val;
+ scoreTxt.setText(score);
+}
+// Oyun bittiğinde
+function gameOver() {
+ isGameActive = false;
+ // Ekranı kırmızıya flashla
+ LK.effects.flashScreen(0xff2222, 800);
+ // Oyun bitişini göster
+ LK.showGameOver();
+}
+// Sürükleme işlemleri
+function handleMove(x, y, obj) {
+ if (!isGameActive) return;
+ if (dragNode) {
+ // Karakteri parmağın olduğu yere taşı
+ dragNode.x = x;
+ dragNode.y = y;
+ // Kenarlara taşmasını engelle
+ var r = dragNode.getRadius();
+ if (dragNode.x < r) dragNode.x = r;
+ if (dragNode.x > GAME_W - r) dragNode.x = GAME_W - r;
+ if (dragNode.y < r) dragNode.y = r;
+ if (dragNode.y > GAME_H - r) dragNode.y = GAME_H - r;
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ if (!isGameActive) return;
+ // Karaktere tıklanmasa bile sürüklemeye başla
+ dragNode = shadow;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Oyun güncelleme döngüsü
+game.update = function () {
+ if (!isGameActive) return;
+ // Mermileri güncelle
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var b = bullets[i];
+ b.update();
+ // Ekran dışına çıkan mermileri sil
+ if (b.isOutOfBounds()) {
+ b.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Çarpışma kontrolü
+ var intersecting = b.intersects(shadow);
+ if (!b.lastIntersecting && intersecting) {
+ // Oyun biter
+ gameOver();
+ return;
+ }
+ b.lastIntersecting = intersecting;
+ }
+ // Skoru güncelle (hayatta kalma süresi)
+ if (LK.ticks % 30 === 0) {
+ updateScore(score + 1);
+ }
+};
+// Oyun yeniden başladığında sıfırla
+game.on('reset', function () {
+ // Mermileri temizle
+ for (var i = 0; i < bullets.length; i++) {
+ bullets[i].destroy();
+ }
+ bullets = [];
+ // Skoru sıfırla
+ updateScore(0);
+ // Karakteri ortaya al
+ shadow.x = GAME_W / 2;
+ shadow.y = GAME_H * 0.8;
+ isGameActive = true;
+ startBulletTimer();
});
\ No newline at end of file
gri bir yuvarlak. In-Game asset. 2d. High contrast. No shadows
white bullet. In-Game asset. 2d. High contrast. No shadows
kırmızı gözler, gözler sadece kırmızı, gözden başka hiçbir şey olmayacak ve 2 tane göz olacak yan yana aynı boyutta, dümdüz kırmızı gözleri ekstra efekt yok, yazı yok, gözler dikine dikdörtgen şeklinde olacak gerçek göz gibi olmayacaklar, gözlerin boşlukları olmayacak gözler köşeli olacak dikine dikdörtgen ve köşeli. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
white color circle. In-Game asset. 2d. High contrast. No shadows
rectangle with rounded edges (color white) (the edges will white too). In-Game asset. 2d. High contrast. No shadows
black walkie talkie. In-Game asset. 2d. High contrast. No shadows
only text no image, agent shadow text logo for agent game. In-Game asset. 2d. High contrast. No shadows
black rectangle (rounded corners). In-Game asset. 2d. High contrast. No shadows
lock icon. no text. only white color. In-Game asset. 2d. High contrast. No shadows
ünlem işareti kırmızı. In-Game asset. 2d. High contrast. No shadows
game skill logo, skill name is "shadow". no text. only image.. In-Game asset. 2d. High contrast. No shadows