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 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.swing = function (targetX, targetY) { if (self.canFire()) { self.fireTimer = self.isEnhanced ? self.fireRate / 2 : self.fireRate; return { x: targetX, y: targetY }; } return null; }; 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; }); var Stick = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('stick', { anchorX: 0.2, anchorY: 0.5 }); self.active = true; self.swingDuration = 20; self.swingTimer = 0; self.startRotation = 0; self.endRotation = 0; self.isSwinging = false; self.update = function () { if (!self.active) return; if (self.isSwinging) { self.swingTimer++; var progress = self.swingTimer / self.swingDuration; if (progress >= 1) { progress = 1; self.isSwinging = false; self.active = false; } // Smooth swing animation var easeProgress = progress * progress * (3 - 2 * progress); graphics.rotation = self.startRotation + (self.endRotation - self.startRotation) * easeProgress; } }; self.swing = function (targetX, targetY) { var dx = targetX - self.x; var dy = targetY - self.y; var targetAngle = Math.atan2(dy, dx); self.startRotation = targetAngle - Math.PI / 3; self.endRotation = targetAngle + Math.PI / 3; graphics.rotation = self.startRotation; self.isSwinging = true; self.swingTimer = 0; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ var player = null; var sticks = []; 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 cleanupSticks() { for (var i = sticks.length - 1; i >= 0; i--) { var stick = sticks[i]; if (!stick.active) { stick.destroy(); sticks.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 checkStickCollisions() { for (var i = 0; i < sticks.length; i++) { var stick = sticks[i]; if (!stick.active || !stick.isSwinging) continue; for (var j = 0; j < monsters.length; j++) { var monster = monsters[j]; if (!monster.active) continue; var distance = Math.sqrt(Math.pow(stick.x - monster.x, 2) + Math.pow(stick.y - monster.y, 2)); if (distance < 80) { monster.takeDamage(1); break; } } } } function nextWave() { waveNumber++; monstersInWave = 5 + waveNumber * 2; monstersSpawned = 0; monstersKilled = 0; spawnTimer = 0; waveDelay = 180; waveText.setText('Wave: ' + waveNumber); } // Movement system for PC and mobile var keys = { w: false, a: false, s: false, d: false }; var playerSpeed = 4; var dragNode = null; // Keyboard event listeners for PC controls LK.on('keydown', function (event) { switch (event.key.toLowerCase()) { case 'w': keys.w = true; break; case 'a': keys.a = true; break; case 's': keys.s = true; break; case 'd': keys.d = true; break; } }); LK.on('keyup', function (event) { switch (event.key.toLowerCase()) { case 'w': keys.w = false; break; case 'a': keys.a = false; break; case 's': keys.s = false; break; case 'd': keys.d = false; break; } }); function updatePlayerMovement() { var moveX = 0; var moveY = 0; if (keys.w) moveY -= playerSpeed; if (keys.s) moveY += playerSpeed; if (keys.a) moveX -= playerSpeed; if (keys.d) moveX += playerSpeed; // Apply movement if (moveX !== 0 || moveY !== 0) { player.x += moveX; player.y += moveY; // Keep player within screen bounds if (player.x < 40) player.x = 40; if (player.x > 2008) player.x = 2008; if (player.y < 40) player.y = 40; if (player.y > 2692) player.y = 2692; } } function handleMove(x, y, obj) { if (dragNode) { dragNode.x = x; dragNode.y = y; // Keep player within screen bounds if (dragNode.x < 40) dragNode.x = 40; if (dragNode.x > 2008) dragNode.x = 2008; if (dragNode.y < 40) dragNode.y = 40; if (dragNode.y > 2692) dragNode.y = 2692; } } game.move = handleMove; // Touch/click controls for attacking and mobile movement game.down = function (x, y, obj) { var swingResult = player.swing(x, y); if (swingResult) { var stick = new Stick(); stick.x = player.x; stick.y = player.y; stick.swing(swingResult.x, swingResult.y); sticks.push(stick); game.addChild(stick); LK.getSound('shoot').play(); } else { // Only allow drag movement if no keyboard input is active if (!keys.w && !keys.a && !keys.s && !keys.d) { dragNode = player; handleMove(x, y, obj); } } }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { // Update player movement from keyboard input updatePlayerMovement(); if (waveDelay > 0) { waveDelay--; return; } spawnTimer++; if (spawnTimer >= 60 && monstersSpawned < monstersInWave) { spawnMonster(); spawnTimer = 0; } powerUpSpawnTimer++; if (powerUpSpawnTimer >= 900) { spawnPowerUp(); powerUpSpawnTimer = 0; } checkStickCollisions(); cleanupSticks(); cleanupMonsters(); cleanupPowerUps(); if (monstersKilled >= monstersInWave && monsters.length === 0) { nextWave(); } scoreText.setText('Score: ' + LK.getScore()); healthText.setText('Health: ' + player.health); };
===================================================================
--- original.js
+++ change.js
@@ -307,16 +307,68 @@
spawnTimer = 0;
waveDelay = 180;
waveText.setText('Wave: ' + waveNumber);
}
-var dragNode = null;
-var moveSpeed = 5;
+// Movement system for PC and mobile
var keys = {
- up: false,
- down: false,
- left: false,
- right: false
+ w: false,
+ a: false,
+ s: false,
+ d: false
};
+var playerSpeed = 4;
+var dragNode = null;
+// Keyboard event listeners for PC controls
+LK.on('keydown', function (event) {
+ switch (event.key.toLowerCase()) {
+ case 'w':
+ keys.w = true;
+ break;
+ case 'a':
+ keys.a = true;
+ break;
+ case 's':
+ keys.s = true;
+ break;
+ case 'd':
+ keys.d = true;
+ break;
+ }
+});
+LK.on('keyup', function (event) {
+ switch (event.key.toLowerCase()) {
+ case 'w':
+ keys.w = false;
+ break;
+ case 'a':
+ keys.a = false;
+ break;
+ case 's':
+ keys.s = false;
+ break;
+ case 'd':
+ keys.d = false;
+ break;
+ }
+});
+function updatePlayerMovement() {
+ var moveX = 0;
+ var moveY = 0;
+ if (keys.w) moveY -= playerSpeed;
+ if (keys.s) moveY += playerSpeed;
+ if (keys.a) moveX -= playerSpeed;
+ if (keys.d) moveX += playerSpeed;
+ // Apply movement
+ if (moveX !== 0 || moveY !== 0) {
+ player.x += moveX;
+ player.y += moveY;
+ // Keep player within screen bounds
+ if (player.x < 40) player.x = 40;
+ if (player.x > 2008) player.x = 2008;
+ if (player.y < 40) player.y = 40;
+ if (player.y > 2692) player.y = 2692;
+ }
+}
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
@@ -326,17 +378,10 @@
if (dragNode.y < 40) dragNode.y = 40;
if (dragNode.y > 2692) dragNode.y = 2692;
}
}
-function updatePlayerMovement() {
- // Simple bounds checking for player movement
- // Keep player within screen bounds
- if (player.x < 40) player.x = 40;
- if (player.x > 2008) player.x = 2008;
- if (player.y < 40) player.y = 40;
- if (player.y > 2692) player.y = 2692;
-}
game.move = handleMove;
+// Touch/click controls for attacking and mobile movement
game.down = function (x, y, obj) {
var swingResult = player.swing(x, y);
if (swingResult) {
var stick = new Stick();
@@ -346,16 +391,20 @@
sticks.push(stick);
game.addChild(stick);
LK.getSound('shoot').play();
} else {
- dragNode = player;
- handleMove(x, y, obj);
+ // Only allow drag movement if no keyboard input is active
+ if (!keys.w && !keys.a && !keys.s && !keys.d) {
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
+ // Update player movement from keyboard input
updatePlayerMovement();
if (waveDelay > 0) {
waveDelay--;
return;
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