User prompt
Make the bullets rotate to direction ı shoot them at
User prompt
Im on pc can we do something better for walking
User prompt
Please fix the bug: 'TypeError: LK.getTouches is not a function' in or related to this line: 'var touches = LK.getTouches();' Line Number: 365
User prompt
Make us able to walk
User prompt
Make us able to walk around and change our wepon to a stick instead of a gun that we can swing and hit
Code edit (1 edits merged)
Please save this source code
User prompt
Monster Defense Arena
Initial prompt
Im planing a top view game. We will have a wepon and kill the monster comes close to us
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; self.dx = 0; self.dy = 0; self.active = true; self.update = function () { if (!self.active) return; self.x += self.dx; self.y += self.dy; if (self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) { self.active = false; } }; self.setDirection = function (targetX, targetY) { var dx = targetX - self.x; var dy = targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.dx = dx / distance * self.speed; self.dy = dy / distance * self.speed; } }; return self; }); var Monster = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('monster', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.health = 1; self.damage = 10; self.active = true; self.lastPlayerDistance = 0; self.update = function () { if (!self.active) return; var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } var currentDistance = distance; if (self.lastPlayerDistance > 50 && currentDistance <= 50) { player.takeDamage(self.damage); self.active = false; } self.lastPlayerDistance = currentDistance; }; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.active = false; LK.setScore(LK.getScore() + 10); LK.getSound('hit').play(); return true; } return false; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.health = 100; self.maxHealth = 100; self.fireRate = 8; self.fireTimer = 0; self.powerUpTimer = 0; self.isEnhanced = false; self.update = function () { if (self.fireTimer > 0) { self.fireTimer--; } if (self.powerUpTimer > 0) { self.powerUpTimer--; if (self.powerUpTimer <= 0) { self.isEnhanced = false; graphics.tint = 0xffffff; } } }; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; LK.showGameOver(); } LK.effects.flashObject(self, 0xff0000, 300); }; self.canFire = function () { return self.fireTimer <= 0; }; self.fire = function () { if (self.canFire()) { self.fireTimer = self.isEnhanced ? self.fireRate / 2 : self.fireRate; return true; } return false; }; self.applyPowerUp = function () { self.isEnhanced = true; self.powerUpTimer = 300; graphics.tint = 0x00ff00; }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.active = true; self.lifeTime = 600; self.blinkTimer = 0; self.update = function () { if (!self.active) return; self.lifeTime--; if (self.lifeTime <= 0) { self.active = false; return; } if (self.lifeTime < 120) { self.blinkTimer++; graphics.alpha = self.blinkTimer % 20 < 10 ? 1 : 0.3; } var distance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2)); if (distance < 40) { player.applyPowerUp(); self.active = false; LK.getSound('pickup').play(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ var player = null; var bullets = []; var monsters = []; var powerups = []; var waveNumber = 1; var monstersInWave = 5; var monstersSpawned = 0; var monstersKilled = 0; var spawnTimer = 0; var waveDelay = 180; var powerUpSpawnTimer = 0; var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var healthText = new Text2('Health: 100', { size: 50, fill: 0xFF4444 }); healthText.anchor.set(0, 0); healthText.x = 120; healthText.y = 20; LK.gui.topLeft.addChild(healthText); var waveText = new Text2('Wave: 1', { size: 50, fill: 0x4A90E2 }); waveText.anchor.set(1, 0); LK.gui.topRight.addChild(waveText); player = game.addChild(new Player()); player.x = 1024; player.y = 1366; function spawnMonster() { if (monstersSpawned >= monstersInWave) return; var monster = new Monster(); var side = Math.floor(Math.random() * 4); switch (side) { case 0: // Top monster.x = Math.random() * 2048; monster.y = -30; break; case 1: // Right monster.x = 2078; monster.y = Math.random() * 2732; break; case 2: // Bottom monster.x = Math.random() * 2048; monster.y = 2762; break; case 3: // Left monster.x = -30; monster.y = Math.random() * 2732; break; } monster.speed = 1.5 + waveNumber * 0.3; monsters.push(monster); game.addChild(monster); monstersSpawned++; } function spawnPowerUp() { if (powerups.length >= 2) return; var powerup = new PowerUp(); powerup.x = 300 + Math.random() * 1448; powerup.y = 300 + Math.random() * 2132; powerups.push(powerup); game.addChild(powerup); } function cleanupBullets() { for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; if (!bullet.active) { bullet.destroy(); bullets.splice(i, 1); } } } function cleanupMonsters() { for (var i = monsters.length - 1; i >= 0; i--) { var monster = monsters[i]; if (!monster.active) { monster.destroy(); monsters.splice(i, 1); monstersKilled++; } } } function cleanupPowerUps() { for (var i = powerups.length - 1; i >= 0; i--) { var powerup = powerups[i]; if (!powerup.active) { powerup.destroy(); powerups.splice(i, 1); } } } function checkBulletCollisions() { for (var i = 0; i < bullets.length; i++) { var bullet = bullets[i]; if (!bullet.active) continue; for (var j = 0; j < monsters.length; j++) { var monster = monsters[j]; if (!monster.active) continue; if (bullet.intersects(monster)) { bullet.active = false; monster.takeDamage(1); break; } } } } function nextWave() { waveNumber++; monstersInWave = 5 + waveNumber * 2; monstersSpawned = 0; monstersKilled = 0; spawnTimer = 0; waveDelay = 180; waveText.setText('Wave: ' + waveNumber); } game.down = function (x, y, obj) { if (player.fire()) { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y; bullet.setDirection(x, y); bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); } }; game.update = function () { if (waveDelay > 0) { waveDelay--; return; } spawnTimer++; if (spawnTimer >= 60 && monstersSpawned < monstersInWave) { spawnMonster(); spawnTimer = 0; } powerUpSpawnTimer++; if (powerUpSpawnTimer >= 900) { spawnPowerUp(); powerUpSpawnTimer = 0; } checkBulletCollisions(); cleanupBullets(); cleanupMonsters(); cleanupPowerUps(); if (monstersKilled >= monstersInWave && monsters.length === 0) { nextWave(); } scoreText.setText('Score: ' + LK.getScore()); healthText.setText('Health: ' + player.health); };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,326 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 12;
+ self.dx = 0;
+ self.dy = 0;
+ self.active = true;
+ self.update = function () {
+ if (!self.active) return;
+ self.x += self.dx;
+ self.y += self.dy;
+ if (self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
+ self.active = false;
+ }
+ };
+ self.setDirection = function (targetX, targetY) {
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.dx = dx / distance * self.speed;
+ self.dy = dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var Monster = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('monster', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.health = 1;
+ self.damage = 10;
+ self.active = true;
+ self.lastPlayerDistance = 0;
+ self.update = function () {
+ if (!self.active) return;
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ var currentDistance = distance;
+ if (self.lastPlayerDistance > 50 && currentDistance <= 50) {
+ player.takeDamage(self.damage);
+ self.active = false;
+ }
+ self.lastPlayerDistance = currentDistance;
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.active = false;
+ LK.setScore(LK.getScore() + 10);
+ LK.getSound('hit').play();
+ return true;
+ }
+ return false;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 100;
+ self.maxHealth = 100;
+ self.fireRate = 8;
+ self.fireTimer = 0;
+ self.powerUpTimer = 0;
+ self.isEnhanced = false;
+ self.update = function () {
+ if (self.fireTimer > 0) {
+ self.fireTimer--;
+ }
+ if (self.powerUpTimer > 0) {
+ self.powerUpTimer--;
+ if (self.powerUpTimer <= 0) {
+ self.isEnhanced = false;
+ graphics.tint = 0xffffff;
+ }
+ }
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.health = 0;
+ LK.showGameOver();
+ }
+ LK.effects.flashObject(self, 0xff0000, 300);
+ };
+ self.canFire = function () {
+ return self.fireTimer <= 0;
+ };
+ self.fire = function () {
+ if (self.canFire()) {
+ self.fireTimer = self.isEnhanced ? self.fireRate / 2 : self.fireRate;
+ return true;
+ }
+ return false;
+ };
+ self.applyPowerUp = function () {
+ self.isEnhanced = true;
+ self.powerUpTimer = 300;
+ graphics.tint = 0x00ff00;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.active = true;
+ self.lifeTime = 600;
+ self.blinkTimer = 0;
+ self.update = function () {
+ if (!self.active) return;
+ self.lifeTime--;
+ if (self.lifeTime <= 0) {
+ self.active = false;
+ return;
+ }
+ if (self.lifeTime < 120) {
+ self.blinkTimer++;
+ graphics.alpha = self.blinkTimer % 20 < 10 ? 1 : 0.3;
+ }
+ var distance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2));
+ if (distance < 40) {
+ player.applyPowerUp();
+ self.active = false;
+ LK.getSound('pickup').play();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2c3e50
+});
+
+/****
+* Game Code
+****/
+var player = null;
+var bullets = [];
+var monsters = [];
+var powerups = [];
+var waveNumber = 1;
+var monstersInWave = 5;
+var monstersSpawned = 0;
+var monstersKilled = 0;
+var spawnTimer = 0;
+var waveDelay = 180;
+var powerUpSpawnTimer = 0;
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var healthText = new Text2('Health: 100', {
+ size: 50,
+ fill: 0xFF4444
+});
+healthText.anchor.set(0, 0);
+healthText.x = 120;
+healthText.y = 20;
+LK.gui.topLeft.addChild(healthText);
+var waveText = new Text2('Wave: 1', {
+ size: 50,
+ fill: 0x4A90E2
+});
+waveText.anchor.set(1, 0);
+LK.gui.topRight.addChild(waveText);
+player = game.addChild(new Player());
+player.x = 1024;
+player.y = 1366;
+function spawnMonster() {
+ if (monstersSpawned >= monstersInWave) return;
+ var monster = new Monster();
+ var side = Math.floor(Math.random() * 4);
+ switch (side) {
+ case 0:
+ // Top
+ monster.x = Math.random() * 2048;
+ monster.y = -30;
+ break;
+ case 1:
+ // Right
+ monster.x = 2078;
+ monster.y = Math.random() * 2732;
+ break;
+ case 2:
+ // Bottom
+ monster.x = Math.random() * 2048;
+ monster.y = 2762;
+ break;
+ case 3:
+ // Left
+ monster.x = -30;
+ monster.y = Math.random() * 2732;
+ break;
+ }
+ monster.speed = 1.5 + waveNumber * 0.3;
+ monsters.push(monster);
+ game.addChild(monster);
+ monstersSpawned++;
+}
+function spawnPowerUp() {
+ if (powerups.length >= 2) return;
+ var powerup = new PowerUp();
+ powerup.x = 300 + Math.random() * 1448;
+ powerup.y = 300 + Math.random() * 2132;
+ powerups.push(powerup);
+ game.addChild(powerup);
+}
+function cleanupBullets() {
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ if (!bullet.active) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ }
+ }
+}
+function cleanupMonsters() {
+ for (var i = monsters.length - 1; i >= 0; i--) {
+ var monster = monsters[i];
+ if (!monster.active) {
+ monster.destroy();
+ monsters.splice(i, 1);
+ monstersKilled++;
+ }
+ }
+}
+function cleanupPowerUps() {
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ var powerup = powerups[i];
+ if (!powerup.active) {
+ powerup.destroy();
+ powerups.splice(i, 1);
+ }
+ }
+}
+function checkBulletCollisions() {
+ for (var i = 0; i < bullets.length; i++) {
+ var bullet = bullets[i];
+ if (!bullet.active) continue;
+ for (var j = 0; j < monsters.length; j++) {
+ var monster = monsters[j];
+ if (!monster.active) continue;
+ if (bullet.intersects(monster)) {
+ bullet.active = false;
+ monster.takeDamage(1);
+ break;
+ }
+ }
+ }
+}
+function nextWave() {
+ waveNumber++;
+ monstersInWave = 5 + waveNumber * 2;
+ monstersSpawned = 0;
+ monstersKilled = 0;
+ spawnTimer = 0;
+ waveDelay = 180;
+ waveText.setText('Wave: ' + waveNumber);
+}
+game.down = function (x, y, obj) {
+ if (player.fire()) {
+ var bullet = new Bullet();
+ bullet.x = player.x;
+ bullet.y = player.y;
+ bullet.setDirection(x, y);
+ bullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ }
+};
+game.update = function () {
+ if (waveDelay > 0) {
+ waveDelay--;
+ return;
+ }
+ spawnTimer++;
+ if (spawnTimer >= 60 && monstersSpawned < monstersInWave) {
+ spawnMonster();
+ spawnTimer = 0;
+ }
+ powerUpSpawnTimer++;
+ if (powerUpSpawnTimer >= 900) {
+ spawnPowerUp();
+ powerUpSpawnTimer = 0;
+ }
+ checkBulletCollisions();
+ cleanupBullets();
+ cleanupMonsters();
+ cleanupPowerUps();
+ if (monstersKilled >= monstersInWave && monsters.length === 0) {
+ nextWave();
+ }
+ scoreText.setText('Score: ' + LK.getScore());
+ healthText.setText('Health: ' + player.health);
+};
\ No newline at end of file
Bullet. In-Game asset. 2d. High contrast. No shadows
A extremly basic zombie look from top. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
A round drop of blood. In-Game asset. 2d. High contrast. No shadows
Make it simple no blood or object
Make its skin blue and make it smile
A happier version of this zombie but its will be purple
Make it green
small rock. In-Game asset. 2d. High contrast. No shadows
Yellow version of it
make it white
Explosion!. In-Game asset. 2d. High contrast. No shadows
Lightning. In-Game asset. 2d. High contrast. No shadows
Make it rainbow and extremly happy
A cowboy hat from top. In-Game asset. 2d. High contrast. No shadows
Hake his skin red and add horns
A card. In-Game asset. 2d. High contrast. No shadows