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); } var dragNode = null; var moveSpeed = 5; var keys = { up: false, down: false, left: false, right: false }; 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; } } function updatePlayerMovement() { // Touch-based movement using multiple touch points var touches = LK.getTouches(); if (touches.length >= 2) { // Use second touch point for movement var moveTouch = touches[1]; var touchX = moveTouch.x; var touchY = moveTouch.y; // Convert touch position to movement direction var centerX = 1024; var centerY = 1366; var deadZone = 100; var deltaX = touchX - centerX; var deltaY = touchY - centerY; if (Math.abs(deltaX) > deadZone || Math.abs(deltaY) > deadZone) { var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); var normalizedX = deltaX / distance; var normalizedY = deltaY / distance; player.x += normalizedX * moveSpeed; player.y += normalizedY * moveSpeed; } } else { // Alternative: Use screen regions for movement var touches = LK.getTouches(); if (touches.length === 1) { var touch = touches[0]; var screenWidth = 2048; var screenHeight = 2732; var edgeThreshold = 200; // Left edge movement if (touch.x < edgeThreshold) { player.x -= moveSpeed; } // Right edge movement if (touch.x > screenWidth - edgeThreshold) { player.x += moveSpeed; } // Top edge movement if (touch.y < edgeThreshold) { player.y -= moveSpeed; } // Bottom edge movement if (touch.y > screenHeight - edgeThreshold) { player.y += moveSpeed; } } } // 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; 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 { dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { 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
@@ -308,8 +308,15 @@
waveDelay = 180;
waveText.setText('Wave: ' + waveNumber);
}
var dragNode = null;
+var moveSpeed = 5;
+var keys = {
+ up: false,
+ down: false,
+ left: false,
+ right: false
+};
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
@@ -319,8 +326,61 @@
if (dragNode.y < 40) dragNode.y = 40;
if (dragNode.y > 2692) dragNode.y = 2692;
}
}
+function updatePlayerMovement() {
+ // Touch-based movement using multiple touch points
+ var touches = LK.getTouches();
+ if (touches.length >= 2) {
+ // Use second touch point for movement
+ var moveTouch = touches[1];
+ var touchX = moveTouch.x;
+ var touchY = moveTouch.y;
+ // Convert touch position to movement direction
+ var centerX = 1024;
+ var centerY = 1366;
+ var deadZone = 100;
+ var deltaX = touchX - centerX;
+ var deltaY = touchY - centerY;
+ if (Math.abs(deltaX) > deadZone || Math.abs(deltaY) > deadZone) {
+ var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
+ var normalizedX = deltaX / distance;
+ var normalizedY = deltaY / distance;
+ player.x += normalizedX * moveSpeed;
+ player.y += normalizedY * moveSpeed;
+ }
+ } else {
+ // Alternative: Use screen regions for movement
+ var touches = LK.getTouches();
+ if (touches.length === 1) {
+ var touch = touches[0];
+ var screenWidth = 2048;
+ var screenHeight = 2732;
+ var edgeThreshold = 200;
+ // Left edge movement
+ if (touch.x < edgeThreshold) {
+ player.x -= moveSpeed;
+ }
+ // Right edge movement
+ if (touch.x > screenWidth - edgeThreshold) {
+ player.x += moveSpeed;
+ }
+ // Top edge movement
+ if (touch.y < edgeThreshold) {
+ player.y -= moveSpeed;
+ }
+ // Bottom edge movement
+ if (touch.y > screenHeight - edgeThreshold) {
+ player.y += moveSpeed;
+ }
+ }
+ }
+ // 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;
game.down = function (x, y, obj) {
var swingResult = player.swing(x, y);
if (swingResult) {
@@ -339,8 +399,9 @@
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
+ 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