/**** * Classes ****/ // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -10; self.update = function () { self.y += self.speed; // Check if the bullet is off-screen and needs to be removed if (self.y < -self.height) { self.destroy(); } }; }); // Explosion class var Explosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Create fragments for (var i = 0; i < 10; i++) { var fragment = new Fragment(); fragment.x = self.x; fragment.y = self.y; game.addChild(fragment); } // Destroy the explosion self.destroy(); }; }); // Fragment class var Fragment = Container.expand(function () { var self = Container.call(this); var fragmentGraphics = self.attachAsset('fragment', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = (Math.random() - 0.5) * 10; self.speedY = (Math.random() - 0.5) * 10; self.gravity = 0.5; self.update = function () { self.x += self.speedX; self.y += self.speedY; self.speedY += self.gravity; if (self.y > 2732 + self.height) { self.destroy(); } }; }); // Assets will be automatically created and loaded by the LK engine based on usage in the game code. // Hero class var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Hero update logic, such as movement, can be added here. // Add scaling effect along the x-axis self.scale.x = 1 + Math.sin(LK.ticks / 10) * 0.1; }; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; self.rotation += 0.01; // Check if the obstacle is off-screen and needs to be removed if (self.y > 2732 + self.height) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Initialize game with a black background }); /**** * Game Code ****/ var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0 })); var hero; var obstacles = []; var bullets = []; var score = 0; var scoreTxt; function spawnObstacle() { var obstacle = new Obstacle(); obstacle.x = Math.random() * (2048 - obstacle.width) + obstacle.width / 2; obstacle.y = -obstacle.height / 2; obstacles.push(obstacle); game.addChild(obstacle); } function fireBullet() { var bullet = new Bullet(); bullet.x = hero.x; bullet.y = hero.y - hero.height / 2 - bullet.height / 2; bullets.push(bullet); game.addChild(bullet); } function checkCollisions() { bullets.forEach(function (bullet, bulletIndex) { obstacles.forEach(function (obstacle, obstacleIndex) { if (bullet.intersects(obstacle)) { bullet.destroy(); obstacle.destroy(); // Create an explosion at the location of the destroyed obstacle var explosion = new Explosion(); explosion.x = obstacle.x; explosion.y = obstacle.y; game.addChild(explosion); bullets.splice(bulletIndex, 1); obstacles.splice(obstacleIndex, 1); score += 10; scoreTxt.setText("Score: " + score); } }); }); } // Initialize hero hero = new Hero(); hero.x = 1024; // Center horizontally hero.y = 2732 - 200; // Position from the bottom game.addChild(hero); // Initialize score display scoreTxt = new Text2("Score: 0", { size: 100, fill: "#ffffff" }); LK.gui.top.addChild(scoreTxt); // Game update function game.update = function () { if (LK.ticks % 120 == 0) { // Spawn an obstacle every 2 seconds spawnObstacle(); } if (LK.ticks % 30 == 0) { // Fire a bullet every 0.5 seconds fireBullet(); } checkCollisions(); }; // Touch event to move the hero game.down = function (x, y, obj) { var gamePos = game.toLocal(obj.global); hero.x = gamePos.x; }; game.move = function (x, y, obj) { var gamePos = game.toLocal(obj.global); hero.x = gamePos.x; };
/****
* Classes
****/
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -10;
self.update = function () {
self.y += self.speed;
// Check if the bullet is off-screen and needs to be removed
if (self.y < -self.height) {
self.destroy();
}
};
});
// Explosion class
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Create fragments
for (var i = 0; i < 10; i++) {
var fragment = new Fragment();
fragment.x = self.x;
fragment.y = self.y;
game.addChild(fragment);
}
// Destroy the explosion
self.destroy();
};
});
// Fragment class
var Fragment = Container.expand(function () {
var self = Container.call(this);
var fragmentGraphics = self.attachAsset('fragment', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = (Math.random() - 0.5) * 10;
self.speedY = (Math.random() - 0.5) * 10;
self.gravity = 0.5;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.speedY += self.gravity;
if (self.y > 2732 + self.height) {
self.destroy();
}
};
});
// Assets will be automatically created and loaded by the LK engine based on usage in the game code.
// Hero class
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Hero update logic, such as movement, can be added here.
// Add scaling effect along the x-axis
self.scale.x = 1 + Math.sin(LK.ticks / 10) * 0.1;
};
});
// Obstacle class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
self.rotation += 0.01;
// Check if the obstacle is off-screen and needs to be removed
if (self.y > 2732 + self.height) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Initialize game with a black background
});
/****
* Game Code
****/
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
var hero;
var obstacles = [];
var bullets = [];
var score = 0;
var scoreTxt;
function spawnObstacle() {
var obstacle = new Obstacle();
obstacle.x = Math.random() * (2048 - obstacle.width) + obstacle.width / 2;
obstacle.y = -obstacle.height / 2;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function fireBullet() {
var bullet = new Bullet();
bullet.x = hero.x;
bullet.y = hero.y - hero.height / 2 - bullet.height / 2;
bullets.push(bullet);
game.addChild(bullet);
}
function checkCollisions() {
bullets.forEach(function (bullet, bulletIndex) {
obstacles.forEach(function (obstacle, obstacleIndex) {
if (bullet.intersects(obstacle)) {
bullet.destroy();
obstacle.destroy();
// Create an explosion at the location of the destroyed obstacle
var explosion = new Explosion();
explosion.x = obstacle.x;
explosion.y = obstacle.y;
game.addChild(explosion);
bullets.splice(bulletIndex, 1);
obstacles.splice(obstacleIndex, 1);
score += 10;
scoreTxt.setText("Score: " + score);
}
});
});
}
// Initialize hero
hero = new Hero();
hero.x = 1024; // Center horizontally
hero.y = 2732 - 200; // Position from the bottom
game.addChild(hero);
// Initialize score display
scoreTxt = new Text2("Score: 0", {
size: 100,
fill: "#ffffff"
});
LK.gui.top.addChild(scoreTxt);
// Game update function
game.update = function () {
if (LK.ticks % 120 == 0) {
// Spawn an obstacle every 2 seconds
spawnObstacle();
}
if (LK.ticks % 30 == 0) {
// Fire a bullet every 0.5 seconds
fireBullet();
}
checkCollisions();
};
// Touch event to move the hero
game.down = function (x, y, obj) {
var gamePos = game.toLocal(obj.global);
hero.x = gamePos.x;
};
game.move = function (x, y, obj) {
var gamePos = game.toLocal(obj.global);
hero.x = gamePos.x;
};