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; 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; 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 () { 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
@@ -5,37 +5,8 @@
/****
* 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,
@@ -115,8 +86,18 @@
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;
@@ -151,8 +132,47 @@
}
};
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
****/
@@ -163,9 +183,9 @@
/****
* Game Code
****/
var player = null;
-var bullets = [];
+var sticks = [];
var monsters = [];
var powerups = [];
var waveNumber = 1;
var monstersInWave = 5;
@@ -235,14 +255,14 @@
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 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() {
@@ -263,17 +283,17 @@
powerups.splice(i, 1);
}
}
}
-function checkBulletCollisions() {
- for (var i = 0; i < bullets.length; i++) {
- var bullet = bullets[i];
- if (!bullet.active) continue;
+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;
- if (bullet.intersects(monster)) {
- bullet.active = false;
+ 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;
}
}
@@ -287,19 +307,39 @@
spawnTimer = 0;
waveDelay = 180;
waveText.setText('Wave: ' + waveNumber);
}
+var dragNode = null;
+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;
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);
+ 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 () {
if (waveDelay > 0) {
waveDelay--;
return;
@@ -313,10 +353,10 @@
if (powerUpSpawnTimer >= 900) {
spawnPowerUp();
powerUpSpawnTimer = 0;
}
- checkBulletCollisions();
- cleanupBullets();
+ checkStickCollisions();
+ cleanupSticks();
cleanupMonsters();
cleanupPowerUps();
if (monstersKilled >= monstersInWave && monsters.length === 0) {
nextWave();
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