User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'scaleX')' in or related to this line: 'if (window.lifebar.scaleX <= 0) {' Line Number: 246
User prompt
Use earth icons to represent lives instead of text
User prompt
Remove lifebar
User prompt
Show 3 lives on the top Right corener and uodate when life is lost
User prompt
Instead of using 3 lives, game over hsould happen when lifebar is empry
User prompt
Make sure lifebar is updated when earth is hit
User prompt
When earth is hit decreaase life and not game.over. only game over when lofebar is empty
User prompt
Add 3 lives to earth
User prompt
Flashscreen should last half a second and then removed
User prompt
Add lifebar to earth
User prompt
Add lifebar to earth. Lifebar will decrease every time an alient hits earth
User prompt
Migrate to the latest version of LK
User prompt
Make sure enemis do not have dark tint
User prompt
Do not allow enemy hace dark colors like black, brown or dark blue
Code edit (3 edits merged)
Please save this source code
User prompt
Every 120 ticks increase shield speed
Code edit (1 edits merged)
Please save this source code
User prompt
Refresh shield speed on tick when enemy is spawned
User prompt
Make sure shield speed is update in game when enemy is spawned
User prompt
Uodate shield speed every time a enemy is spawned
User prompt
Increase shield speed proportionally to the speed increase on enemies
User prompt
Do not allow enemy color to be dark like brown or black or dark blue
Code edit (1 edits merged)
Please save this source code
User prompt
shield speed should also increase progressively
User prompt
Increase shield speed progressively
/**** * Classes ****/ var Alien = Container.expand(function () { var self = Container.call(this); var alienGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, tint: Math.floor(Math.random() * (0xFFFFFF - 0x808080)) + 0x808080 }); self.baseSpeed = 2; self.speedMultiplier = 1; self._move_migrated = function () { var dy = earth.y - self.y; var dx = earth.x - self.x; var angle = Math.atan2(dy, dx); var speed = self.baseSpeed * self.speedMultiplier; self.x += speed * Math.cos(angle); self.y += speed * Math.sin(angle); // Emit engine particles var particleAngle = angle + Math.PI; // Opposite direction of movement if (Math.random() < 0.5) { var particleSpeed = Math.random() * 2 + 2; var particle = ParticlePool.get(self.children[0].tint, particleSpeed, particleAngle); particle.x = self.x + 50 * Math.cos(particleAngle); particle.y = self.y + 50 * Math.sin(particleAngle); game.addChild(particle); } }; }); var Explosion = Container.expand(function (colorTint) { var self = Container.call(this); self.particles = []; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.2, scaleY: 0.2, alpha: 0.8, tint: colorTint }); particle.vx = (Math.random() - 0.5) * 10; particle.vy = (Math.random() - 0.5) * 10; self.particles.push(particle); } self._update_migrated = function () { for (var i = self.particles.length - 1; i >= 0; i--) { var p = self.particles[i]; p.x += p.vx; p.y += p.vy; p.alpha -= 0.02; if (p.alpha <= 0) { p.destroy(); self.particles.splice(i, 1); } } }; }); var Particle = Container.expand(function (colorTint, speed, angle) { var self = Container.call(this); var particleGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 0.8, tint: colorTint }); self.vx = speed * Math.cos(angle); self.vy = speed * Math.sin(angle); self.lifeSpan = 60; self.reset = function (colorTint, speed, angle) { self.vx = speed * Math.cos(angle); self.vy = speed * Math.sin(angle); self.alpha = 0.8; particleGraphics.tint = colorTint; self.lifeSpan = 60; }; self._update_migrated = function () { self.x += self.vx; self.y += self.vy; self.alpha -= 1 / self.lifeSpan; if (self.alpha <= 0) { self.visible = false; } }; return self; }); // Shield class var Shield = Container.expand(function () { var self = Container.call(this); self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5 }); self.orbitRadius = 200; self.orbitSpeed = 0.04; self.orbitAngle = 0; self._update_migrated = function () { self.orbitAngle += self.orbitSpeed; self.x = earth.x + self.orbitRadius * Math.cos(self.orbitAngle); self.y = earth.y + self.orbitRadius * Math.sin(self.orbitAngle); var angleToEarth = Math.atan2(earth.y - self.y, earth.x - self.x); self.rotation = angleToEarth + Math.PI / 2; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Particle class // Explosion class // Alien class // Missile class // Initialize assets used in the game. // Game variables var ParticlePool = function () { var particles = []; return { get: function get(colorTint, speed, angle) { var particle = particles.find(function (p) { return !p.visible; }); if (!particle) { particle = new Particle(colorTint, speed, angle); particles.push(particle); } else { particle.reset(colorTint, speed, angle); } particle.visible = true; return particle; }, updateAll: function updateAll() { particles.forEach(function (particle) { if (particle.visible) { particle._update_migrated(); } }); } }; }(); var aliens = []; var earth; var scoreTxt; var particles = []; // Array to keep track of particles var spawnAlienInterval = 120; // Frames until a new alien spawns var spawnAlienIntervalDecrement = 0.98; // Multiplier to decrease spawn interval var nextAlienSpawn = spawnAlienInterval; // Initialize Earth function initEarth() { earth = game.addChild(LK.getAsset('earth', { anchorX: 0.5, anchorY: 0.5, x: game.width / 2, y: game.height / 2 })); window.shield = game.addChild(new Shield()); window.shield.x = earth.x; window.shield.y = earth.y - window.shield.orbitRadius; } // Initialize score display function initScore() { scoreTxt = new Text2('', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); } // Spawn an alien function spawnAlien() { var alien = new Alien(); alien.baseSpeed += LK.getScore() * 0.1; var side = Math.floor(Math.random() * 4); switch (side) { case 0: // top alien.x = Math.random() * game.width; alien.y = -alien.height; break; case 1: // right alien.x = game.width + alien.width; alien.y = Math.random() * game.height; break; case 2: // bottom alien.x = Math.random() * game.width; alien.y = game.height + alien.height; break; case 3: // left alien.x = -alien.width; alien.y = Math.random() * game.height; break; } aliens.push(alien); game.addChild(alien); } // Check for collisions function checkCollisions() { for (var i = 0; i < aliens.length; i++) { if (window.shield.intersects(aliens[i])) { var alienColor = aliens[i].children[0].tint; var explosion = new Explosion(alienColor); explosion.x = aliens[i].x; explosion.y = aliens[i].y; game.addChild(explosion); aliens[i].destroy(); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore().toString()); aliens.splice(i, 1); } } } // Game over check function checkGameOver() { for (var i = 0; i < aliens.length; i++) { if (aliens[i].intersects(earth)) { var alienColor = aliens[i].children[0].tint; LK.effects.flashScreen(alienColor, 2000); LK.showGameOver(); break; } } } // Touch event to move shield game.on('down', function (x, y, obj) { window.shield.orbitSpeed *= -1; }); // Game tick event LK.on('tick', function () { // Update explosions and particles game.children.forEach(function (child) { if (child instanceof Explosion) { child._update_migrated(); } }); ParticlePool.updateAll(); // Move aliens for (var j = aliens.length - 1; j >= 0; j--) { aliens[j]._move_migrated(); if (aliens[j].y > game.height + aliens[j].height) { aliens[j].destroy(); aliens.splice(j, 1); } } // Spawn aliens and update spawn interval nextAlienSpawn--; if (nextAlienSpawn <= 0) { spawnAlien(); nextAlienSpawn = spawnAlienInterval; spawnAlienInterval *= spawnAlienIntervalDecrement; } // Increase shield speed every 120 ticks if (LK.ticks % 120 === 0) { window.shield.orbitSpeed += window.shield.orbitSpeed > 0 ? 0.001 : -0.001; } // Update shield position window.shield._update_migrated(); // Check for collisions and game over checkCollisions(); checkGameOver(); }); // Initialize game elements initEarth(); initScore();
===================================================================
--- original.js
+++ change.js
@@ -1,36 +1,33 @@
/****
* Classes
-****/
-var Particle = Container.expand(function (colorTint, speed, angle) {
+****/
+var Alien = Container.expand(function () {
var self = Container.call(this);
- var particleGraphics = self.attachAsset('alien', {
+ var alienGraphics = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5,
- scaleX: 0.3,
- scaleY: 0.3,
- alpha: 0.8,
- tint: colorTint
+ tint: Math.floor(Math.random() * (0xFFFFFF - 0x808080)) + 0x808080
});
- self.vx = speed * Math.cos(angle);
- self.vy = speed * Math.sin(angle);
- self.lifeSpan = 60;
- self.reset = function (colorTint, speed, angle) {
- self.vx = speed * Math.cos(angle);
- self.vy = speed * Math.sin(angle);
- self.alpha = 0.8;
- particleGraphics.tint = colorTint;
- self.lifeSpan = 60;
- };
- self.update = function () {
- self.x += self.vx;
- self.y += self.vy;
- self.alpha -= 1 / self.lifeSpan;
- if (self.alpha <= 0) {
- self.visible = false;
+ self.baseSpeed = 2;
+ self.speedMultiplier = 1;
+ self._move_migrated = function () {
+ var dy = earth.y - self.y;
+ var dx = earth.x - self.x;
+ var angle = Math.atan2(dy, dx);
+ var speed = self.baseSpeed * self.speedMultiplier;
+ self.x += speed * Math.cos(angle);
+ self.y += speed * Math.sin(angle);
+ // Emit engine particles
+ var particleAngle = angle + Math.PI; // Opposite direction of movement
+ if (Math.random() < 0.5) {
+ var particleSpeed = Math.random() * 2 + 2;
+ var particle = ParticlePool.get(self.children[0].tint, particleSpeed, particleAngle);
+ particle.x = self.x + 50 * Math.cos(particleAngle);
+ particle.y = self.y + 50 * Math.sin(particleAngle);
+ game.addChild(particle);
}
};
- return self;
});
var Explosion = Container.expand(function (colorTint) {
var self = Container.call(this);
self.particles = [];
@@ -46,9 +43,9 @@
particle.vx = (Math.random() - 0.5) * 10;
particle.vy = (Math.random() - 0.5) * 10;
self.particles.push(particle);
}
- self.update = function () {
+ self._update_migrated = function () {
for (var i = self.particles.length - 1; i >= 0; i--) {
var p = self.particles[i];
p.x += p.vx;
p.y += p.vy;
@@ -59,34 +56,37 @@
}
}
};
});
-var Alien = Container.expand(function () {
+var Particle = Container.expand(function (colorTint, speed, angle) {
var self = Container.call(this);
- var alienGraphics = self.attachAsset('alien', {
+ var particleGraphics = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5,
- tint: Math.floor(Math.random() * (0xFFFFFF - 0x808080)) + 0x808080
+ scaleX: 0.3,
+ scaleY: 0.3,
+ alpha: 0.8,
+ tint: colorTint
});
- self.baseSpeed = 2;
- self.speedMultiplier = 1;
- self.move = function () {
- var dy = earth.y - self.y;
- var dx = earth.x - self.x;
- var angle = Math.atan2(dy, dx);
- var speed = self.baseSpeed * self.speedMultiplier;
- self.x += speed * Math.cos(angle);
- self.y += speed * Math.sin(angle);
- // Emit engine particles
- var particleAngle = angle + Math.PI; // Opposite direction of movement
- if (Math.random() < 0.5) {
- var particleSpeed = Math.random() * 2 + 2;
- var particle = ParticlePool.get(self.children[0].tint, particleSpeed, particleAngle);
- particle.x = self.x + 50 * Math.cos(particleAngle);
- particle.y = self.y + 50 * Math.sin(particleAngle);
- game.addChild(particle);
+ self.vx = speed * Math.cos(angle);
+ self.vy = speed * Math.sin(angle);
+ self.lifeSpan = 60;
+ self.reset = function (colorTint, speed, angle) {
+ self.vx = speed * Math.cos(angle);
+ self.vy = speed * Math.sin(angle);
+ self.alpha = 0.8;
+ particleGraphics.tint = colorTint;
+ self.lifeSpan = 60;
+ };
+ self._update_migrated = function () {
+ self.x += self.vx;
+ self.y += self.vy;
+ self.alpha -= 1 / self.lifeSpan;
+ if (self.alpha <= 0) {
+ self.visible = false;
}
};
+ return self;
});
// Shield class
var Shield = Container.expand(function () {
var self = Container.call(this);
@@ -96,9 +96,9 @@
});
self.orbitRadius = 200;
self.orbitSpeed = 0.04;
self.orbitAngle = 0;
- self.update = function () {
+ self._update_migrated = function () {
self.orbitAngle += self.orbitSpeed;
self.x = earth.x + self.orbitRadius * Math.cos(self.orbitAngle);
self.y = earth.y + self.orbitRadius * Math.sin(self.orbitAngle);
var angleToEarth = Math.atan2(earth.y - self.y, earth.x - self.x);
@@ -107,16 +107,16 @@
});
/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
-****/
+****/
// Particle class
// Explosion class
// Alien class
// Missile class
@@ -140,9 +140,9 @@
},
updateAll: function updateAll() {
particles.forEach(function (particle) {
if (particle.visible) {
- particle.update();
+ particle._update_migrated();
}
});
}
};
@@ -232,23 +232,23 @@
}
}
}
// Touch event to move shield
-game.on('down', function (obj) {
+game.on('down', function (x, y, obj) {
window.shield.orbitSpeed *= -1;
});
// Game tick event
LK.on('tick', function () {
// Update explosions and particles
game.children.forEach(function (child) {
if (child instanceof Explosion) {
- child.update();
+ child._update_migrated();
}
});
ParticlePool.updateAll();
// Move aliens
for (var j = aliens.length - 1; j >= 0; j--) {
- aliens[j].move();
+ aliens[j]._move_migrated();
if (aliens[j].y > game.height + aliens[j].height) {
aliens[j].destroy();
aliens.splice(j, 1);
}
@@ -264,9 +264,9 @@
if (LK.ticks % 120 === 0) {
window.shield.orbitSpeed += window.shield.orbitSpeed > 0 ? 0.001 : -0.001;
}
// Update shield position
- window.shield.update();
+ window.shield._update_migrated();
// Check for collisions and game over
checkCollisions();
checkGameOver();
});