/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.fireRate = 120;
self.fireTimer = Math.random() * 120;
self.movePattern = 0;
self.timeAlive = 0;
self.update = function () {
self.timeAlive++;
if (self.movePattern === 0) {
self.y += self.speed;
} else if (self.movePattern === 1) {
self.y += self.speed;
self.x += Math.sin(self.timeAlive * 0.05) * 2;
}
if (self.fireTimer > 0) {
self.fireTimer--;
} else {
self.fire();
self.fireTimer = self.fireRate;
}
};
self.fire = function () {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y;
enemyBullets.push(bullet);
game.addChild(bullet);
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var PlayerShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.fireRate = 15;
self.fireTimer = 0;
self.shield = false;
self.multiShot = false;
self.powerUpTimer = 0;
self.update = function () {
if (self.fireTimer > 0) {
self.fireTimer--;
}
if (self.powerUpTimer > 0) {
self.powerUpTimer--;
if (self.powerUpTimer <= 0) {
self.multiShot = false;
self.shield = false;
shipGraphics.tint = 0xffffff;
}
}
if (self.shield) {
shipGraphics.tint = 0x00ffff;
} else if (self.multiShot) {
shipGraphics.tint = 0xffff00;
}
};
self.down = function (x, y, obj) {
// Cancel any active powerup when player taps on the ship
if (self.powerUpTimer > 0) {
self.powerUpTimer = 0;
self.multiShot = false;
self.shield = false;
shipGraphics.tint = 0xffffff;
}
};
self.fire = function () {
if (self.fireTimer <= 0) {
if (self.multiShot) {
var bullet1 = new PlayerBullet();
bullet1.x = self.x - 20;
bullet1.y = self.y;
playerBullets.push(bullet1);
game.addChild(bullet1);
var bullet2 = new PlayerBullet();
bullet2.x = self.x;
bullet2.y = self.y;
playerBullets.push(bullet2);
game.addChild(bullet2);
var bullet3 = new PlayerBullet();
bullet3.x = self.x + 20;
bullet3.y = self.y;
playerBullets.push(bullet3);
game.addChild(bullet3);
} else {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y;
playerBullets.push(bullet);
game.addChild(bullet);
}
LK.getSound('shoot').play();
self.fireTimer = self.fireRate;
}
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.type = 'shield';
self.rotationSpeed = 0.1;
self.update = function () {
self.y += self.speed;
powerUpGraphics.rotation += self.rotationSpeed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
var player = null;
var playerBullets = [];
var enemyShips = [];
var enemyBullets = [];
var powerUps = [];
var enemySpawnTimer = 0;
var powerUpSpawnTimer = 0;
var waveTimer = 0;
var difficulty = 1;
var dragNode = null;
var scoreText = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var waveText = new Text2('Wave 1', {
size: 40,
fill: 0xFFFF00
});
waveText.anchor.set(0, 0);
waveText.x = 50;
waveText.y = 50;
LK.gui.topLeft.addChild(waveText);
player = game.addChild(new PlayerShip());
player.x = 1024;
player.y = 2500;
LK.playMusic('bgMusic');
function spawnEnemy() {
var enemy = new EnemyShip();
enemy.x = Math.random() * (2048 - 120) + 60;
enemy.y = -30;
enemy.speed = 2 + difficulty * 0.5;
enemy.movePattern = Math.random() < 0.3 ? 1 : 0;
enemyShips.push(enemy);
game.addChild(enemy);
}
function spawnPowerUp() {
var powerUp = new PowerUp();
powerUp.x = Math.random() * (2048 - 80) + 40;
powerUp.y = -20;
powerUp.type = Math.random() < 0.5 ? 'shield' : 'multiShot';
if (powerUp.type === 'multiShot') {
powerUp.getChildAt(0).tint = 0xffff00;
}
powerUps.push(powerUp);
game.addChild(powerUp);
}
function handleMove(x, y, obj) {
player.x = Math.max(40, Math.min(2008, x));
player.y = Math.max(40, Math.min(2692, y));
}
game.move = handleMove;
game.update = function () {
waveTimer++;
if (waveTimer % 1800 === 0) {
difficulty++;
waveText.setText('Wave ' + difficulty);
}
enemySpawnTimer++;
var spawnRate = Math.max(60, 150 - difficulty * 8);
if (enemySpawnTimer >= spawnRate) {
spawnEnemy();
enemySpawnTimer = 0;
}
powerUpSpawnTimer++;
if (powerUpSpawnTimer >= 300) {
if (Math.random() < 0.7) {
spawnPowerUp();
}
powerUpSpawnTimer = 0;
}
player.fire();
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -20 && bullet.y < -20) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY <= 2732 && bullet.y > 2732) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
if (bullet.lastIntersecting === undefined) bullet.lastIntersecting = false;
var currentIntersecting = bullet.intersects(player);
if (!bullet.lastIntersecting && currentIntersecting) {
if (!player.shield) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
} else {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
}
bullet.lastY = bullet.y;
bullet.lastIntersecting = currentIntersecting;
}
for (var i = enemyShips.length - 1; i >= 0; i--) {
var enemy = enemyShips[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
if (enemy.lastY <= 2732 && enemy.y > 2732) {
enemy.destroy();
enemyShips.splice(i, 1);
continue;
}
if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false;
var currentIntersecting = enemy.intersects(player);
if (!enemy.lastIntersecting && currentIntersecting) {
// Cancel powerup when touching enemy
if (player.powerUpTimer > 0) {
player.powerUpTimer = 0;
player.multiShot = false;
player.shield = false;
player.getChildAt(0).tint = 0xffffff;
}
if (!player.shield) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
} else {
enemy.destroy();
enemyShips.splice(i, 1);
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
continue;
}
}
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
if (bullet.lastEnemyIntersecting === undefined) bullet.lastEnemyIntersecting = [];
if (bullet.lastEnemyIntersecting[i] === undefined) bullet.lastEnemyIntersecting[i] = false;
var bulletEnemyIntersecting = bullet.intersects(enemy);
if (!bullet.lastEnemyIntersecting[i] && bulletEnemyIntersecting) {
LK.getSound('enemyDestroy').play();
enemy.destroy();
enemyShips.splice(i, 1);
bullet.destroy();
playerBullets.splice(j, 1);
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
break;
}
bullet.lastEnemyIntersecting[i] = bulletEnemyIntersecting;
}
if (i < enemyShips.length) {
enemy.lastY = enemy.y;
enemy.lastIntersecting = currentIntersecting;
}
}
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
if (powerUp.lastY <= 2732 && powerUp.y > 2732) {
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
if (powerUp.lastIntersecting === undefined) powerUp.lastIntersecting = false;
var currentIntersecting = powerUp.intersects(player);
if (!powerUp.lastIntersecting && currentIntersecting) {
LK.getSound('powerUpCollect').play();
if (powerUp.type === 'shield') {
player.shield = true;
} else if (powerUp.type === 'multiShot') {
player.multiShot = true;
}
player.powerUpTimer = 600;
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
powerUp.lastY = powerUp.y;
powerUp.lastIntersecting = currentIntersecting;
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.fireRate = 120;
self.fireTimer = Math.random() * 120;
self.movePattern = 0;
self.timeAlive = 0;
self.update = function () {
self.timeAlive++;
if (self.movePattern === 0) {
self.y += self.speed;
} else if (self.movePattern === 1) {
self.y += self.speed;
self.x += Math.sin(self.timeAlive * 0.05) * 2;
}
if (self.fireTimer > 0) {
self.fireTimer--;
} else {
self.fire();
self.fireTimer = self.fireRate;
}
};
self.fire = function () {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y;
enemyBullets.push(bullet);
game.addChild(bullet);
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var PlayerShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.fireRate = 15;
self.fireTimer = 0;
self.shield = false;
self.multiShot = false;
self.powerUpTimer = 0;
self.update = function () {
if (self.fireTimer > 0) {
self.fireTimer--;
}
if (self.powerUpTimer > 0) {
self.powerUpTimer--;
if (self.powerUpTimer <= 0) {
self.multiShot = false;
self.shield = false;
shipGraphics.tint = 0xffffff;
}
}
if (self.shield) {
shipGraphics.tint = 0x00ffff;
} else if (self.multiShot) {
shipGraphics.tint = 0xffff00;
}
};
self.down = function (x, y, obj) {
// Cancel any active powerup when player taps on the ship
if (self.powerUpTimer > 0) {
self.powerUpTimer = 0;
self.multiShot = false;
self.shield = false;
shipGraphics.tint = 0xffffff;
}
};
self.fire = function () {
if (self.fireTimer <= 0) {
if (self.multiShot) {
var bullet1 = new PlayerBullet();
bullet1.x = self.x - 20;
bullet1.y = self.y;
playerBullets.push(bullet1);
game.addChild(bullet1);
var bullet2 = new PlayerBullet();
bullet2.x = self.x;
bullet2.y = self.y;
playerBullets.push(bullet2);
game.addChild(bullet2);
var bullet3 = new PlayerBullet();
bullet3.x = self.x + 20;
bullet3.y = self.y;
playerBullets.push(bullet3);
game.addChild(bullet3);
} else {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y;
playerBullets.push(bullet);
game.addChild(bullet);
}
LK.getSound('shoot').play();
self.fireTimer = self.fireRate;
}
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.type = 'shield';
self.rotationSpeed = 0.1;
self.update = function () {
self.y += self.speed;
powerUpGraphics.rotation += self.rotationSpeed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
var player = null;
var playerBullets = [];
var enemyShips = [];
var enemyBullets = [];
var powerUps = [];
var enemySpawnTimer = 0;
var powerUpSpawnTimer = 0;
var waveTimer = 0;
var difficulty = 1;
var dragNode = null;
var scoreText = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var waveText = new Text2('Wave 1', {
size: 40,
fill: 0xFFFF00
});
waveText.anchor.set(0, 0);
waveText.x = 50;
waveText.y = 50;
LK.gui.topLeft.addChild(waveText);
player = game.addChild(new PlayerShip());
player.x = 1024;
player.y = 2500;
LK.playMusic('bgMusic');
function spawnEnemy() {
var enemy = new EnemyShip();
enemy.x = Math.random() * (2048 - 120) + 60;
enemy.y = -30;
enemy.speed = 2 + difficulty * 0.5;
enemy.movePattern = Math.random() < 0.3 ? 1 : 0;
enemyShips.push(enemy);
game.addChild(enemy);
}
function spawnPowerUp() {
var powerUp = new PowerUp();
powerUp.x = Math.random() * (2048 - 80) + 40;
powerUp.y = -20;
powerUp.type = Math.random() < 0.5 ? 'shield' : 'multiShot';
if (powerUp.type === 'multiShot') {
powerUp.getChildAt(0).tint = 0xffff00;
}
powerUps.push(powerUp);
game.addChild(powerUp);
}
function handleMove(x, y, obj) {
player.x = Math.max(40, Math.min(2008, x));
player.y = Math.max(40, Math.min(2692, y));
}
game.move = handleMove;
game.update = function () {
waveTimer++;
if (waveTimer % 1800 === 0) {
difficulty++;
waveText.setText('Wave ' + difficulty);
}
enemySpawnTimer++;
var spawnRate = Math.max(60, 150 - difficulty * 8);
if (enemySpawnTimer >= spawnRate) {
spawnEnemy();
enemySpawnTimer = 0;
}
powerUpSpawnTimer++;
if (powerUpSpawnTimer >= 300) {
if (Math.random() < 0.7) {
spawnPowerUp();
}
powerUpSpawnTimer = 0;
}
player.fire();
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -20 && bullet.y < -20) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY <= 2732 && bullet.y > 2732) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
if (bullet.lastIntersecting === undefined) bullet.lastIntersecting = false;
var currentIntersecting = bullet.intersects(player);
if (!bullet.lastIntersecting && currentIntersecting) {
if (!player.shield) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
} else {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
}
bullet.lastY = bullet.y;
bullet.lastIntersecting = currentIntersecting;
}
for (var i = enemyShips.length - 1; i >= 0; i--) {
var enemy = enemyShips[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
if (enemy.lastY <= 2732 && enemy.y > 2732) {
enemy.destroy();
enemyShips.splice(i, 1);
continue;
}
if (enemy.lastIntersecting === undefined) enemy.lastIntersecting = false;
var currentIntersecting = enemy.intersects(player);
if (!enemy.lastIntersecting && currentIntersecting) {
// Cancel powerup when touching enemy
if (player.powerUpTimer > 0) {
player.powerUpTimer = 0;
player.multiShot = false;
player.shield = false;
player.getChildAt(0).tint = 0xffffff;
}
if (!player.shield) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
} else {
enemy.destroy();
enemyShips.splice(i, 1);
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
continue;
}
}
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
if (bullet.lastEnemyIntersecting === undefined) bullet.lastEnemyIntersecting = [];
if (bullet.lastEnemyIntersecting[i] === undefined) bullet.lastEnemyIntersecting[i] = false;
var bulletEnemyIntersecting = bullet.intersects(enemy);
if (!bullet.lastEnemyIntersecting[i] && bulletEnemyIntersecting) {
LK.getSound('enemyDestroy').play();
enemy.destroy();
enemyShips.splice(i, 1);
bullet.destroy();
playerBullets.splice(j, 1);
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
break;
}
bullet.lastEnemyIntersecting[i] = bulletEnemyIntersecting;
}
if (i < enemyShips.length) {
enemy.lastY = enemy.y;
enemy.lastIntersecting = currentIntersecting;
}
}
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
if (powerUp.lastY <= 2732 && powerUp.y > 2732) {
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
if (powerUp.lastIntersecting === undefined) powerUp.lastIntersecting = false;
var currentIntersecting = powerUp.intersects(player);
if (!powerUp.lastIntersecting && currentIntersecting) {
LK.getSound('powerUpCollect').play();
if (powerUp.type === 'shield') {
player.shield = true;
} else if (powerUp.type === 'multiShot') {
player.multiShot = true;
}
player.powerUpTimer = 600;
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
powerUp.lastY = powerUp.y;
powerUp.lastIntersecting = currentIntersecting;
}
};
A space ship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a bullet for the space ship player . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a alien ship for the space shooter game. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
clipart
a powerup for the player that looks like a battery. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat