/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Collectible = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('collectible', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.active = true; self.collected = false; self.update = function () { if (!self.active) { return; } self.x -= self.speed; // Spin the collectible asset.rotation += 0.05; // Remove when off screen if (self.x < -100) { self.active = false; self.destroy(); } }; self.collect = function () { if (self.collected) { return; } self.collected = true; LK.getSound('collect').play(); // Collect animation tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.active = false; self.destroy(); } }); }; return self; }); var Obstacle = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'obstacle'; var asset = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.active = true; self.update = function () { if (!self.active) { return; } self.x -= self.speed; // Remove when off screen if (self.x < -100) { self.active = false; self.destroy(); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 0; self.gravity = 1; self.jumpPower = -20; self.isJumping = false; self.isDead = false; self.jump = function () { if (!self.isJumping && !self.isDead) { self.velocity = self.jumpPower; self.isJumping = true; LK.getSound('jump').play(); } }; self.die = function () { if (!self.isDead) { self.isDead = true; LK.getSound('death').play(); LK.effects.flashObject(self, 0xFF0000, 500); // Create death animation tween(self, { alpha: 0, rotation: Math.PI * 4 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { LK.showGameOver(); } }); } }; self.update = function () { if (self.isDead) { return; } // Apply gravity self.velocity += self.gravity; self.y += self.velocity; // Floor collision if (self.y > groundLevel - 50) { // Adjust for player height self.y = groundLevel - 50; self.velocity = 0; self.isJumping = false; } // Ceiling collision if (self.y < 50) { self.y = 50; self.velocity = 0; } // Visual feedback for jumping if (self.isJumping) { playerGraphics.rotation += 0.1; } else { playerGraphics.rotation = 0; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x333333 }); /**** * Game Code ****/ // Game variables var player; var obstacles = []; var collectibles = []; var score = 0; var level = 1; var gameSpeed = 1; var groundLevel = 2732 - 100; var gameActive = false; var lastObstacleTime = 0; var obstacleSpawnRate = 1500; // milliseconds var collectibleSpawnRate = 3000; // milliseconds var lastCollectibleTime = 0; var levelProgression = 0; // Initialize UI var scoreTxt = new Text2('0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0, 0); levelTxt.x = 150; levelTxt.y = 20; LK.gui.topRight.addChild(levelTxt); // Create floor var floor = LK.getAsset('platform', { anchorX: 0, anchorY: 0, scaleX: 7, scaleY: 1 }); floor.x = 0; floor.y = groundLevel; game.addChild(floor); // Initialize player function initPlayer() { player = new Player(); player.x = 400; player.y = groundLevel - 50; // Position player to touch the ground accounting for anchor game.addChild(player); } // Initialize game function initGame() { // Clear any existing objects for (var i = obstacles.length - 1; i >= 0; i--) { if (obstacles[i] && obstacles[i].parent) { obstacles[i].destroy(); } } obstacles = []; for (var i = collectibles.length - 1; i >= 0; i--) { if (collectibles[i] && collectibles[i].parent) { collectibles[i].destroy(); } } collectibles = []; // Reset variables score = 0; level = 1; gameSpeed = 1; levelProgression = 0; lastObstacleTime = Date.now(); lastCollectibleTime = Date.now(); // Update UI scoreTxt.setText(score); levelTxt.setText('Level: ' + level); // Initialize player if (player && player.parent) { player.destroy(); } initPlayer(); // Start the game gameActive = true; // Play music LK.playMusic('gameMusic'); } // Spawn obstacle function spawnObstacle() { var type; var rnd = Math.random(); if (rnd < 0.4) { type = 'obstacle'; } else if (rnd < 0.7) { type = 'spike'; } else { type = 'platform'; } var obstacle = new Obstacle(type); obstacle.x = 2048 + 100; // Position based on type if (type === 'platform') { // Platforms at varying heights obstacle.y = groundLevel - 200 - Math.random() * 300; } else if (type === 'spike') { // Spikes on the ground obstacle.y = groundLevel - 30; } else { // Regular obstacles on the ground obstacle.y = groundLevel - 50; } // Adjust speed based on level obstacle.speed = 8 + (level - 1) * 1.5; // Add to game game.addChild(obstacle); obstacles.push(obstacle); lastObstacleTime = Date.now(); } // Spawn collectible function spawnCollectible() { var collectible = new Collectible(); collectible.x = 2048 + 100; collectible.y = groundLevel - 100 - Math.random() * 400; // Random height // Adjust speed based on level collectible.speed = 8 + (level - 1) * 1.5; // Add to game game.addChild(collectible); collectibles.push(collectible); lastCollectibleTime = Date.now(); } // Check collisions function checkCollisions() { if (!player || player.isDead) { return; } // Check obstacle collisions for (var i = 0; i < obstacles.length; i++) { var obstacle = obstacles[i]; if (obstacle.active && player.intersects(obstacle)) { if (obstacle.type === 'platform') { // Land on platform if (player.velocity > 0 && player.y < obstacle.y - 30) { player.y = obstacle.y - 50; player.velocity = 0; player.isJumping = false; } } else { // Die on obstacle/spike player.die(); return; } } } // Check collectible collisions for (var i = 0; i < collectibles.length; i++) { var collectible = collectibles[i]; if (collectible.active && !collectible.collected && player.intersects(collectible)) { collectible.collect(); updateScore(10); } } } // Update score function updateScore(points) { score += points; scoreTxt.setText(score); levelProgression += points; // Level up after certain score thresholds if (levelProgression >= 100) { levelUp(); } } // Level up function levelUp() { level++; levelTxt.setText('Level: ' + level); levelProgression = 0; gameSpeed += 0.2; // Flash screen to indicate level up LK.effects.flashScreen(0x00FF00, 500); // Reduce spawn times as levels progress obstacleSpawnRate = Math.max(800, obstacleSpawnRate - 100); collectibleSpawnRate = Math.max(1500, collectibleSpawnRate - 200); } // Input handling game.down = function (x, y, obj) { if (!gameActive) { initGame(); } else if (player && !player.isDead) { player.jump(); } }; // Main update loop game.update = function () { if (!gameActive) { return; } // Spawn obstacles var currentTime = Date.now(); if (currentTime - lastObstacleTime > obstacleSpawnRate) { spawnObstacle(); } // Spawn collectibles if (currentTime - lastCollectibleTime > collectibleSpawnRate) { spawnCollectible(); } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { if (obstacles[i] && obstacles[i].active) { obstacles[i].update(); } else { obstacles.splice(i, 1); } } // Update collectibles for (var i = collectibles.length - 1; i >= 0; i--) { if (collectibles[i] && collectibles[i].active) { collectibles[i].update(); } else { collectibles.splice(i, 1); } } // Passive score increase if (LK.ticks % 60 === 0 && !player.isDead) { updateScore(1); } // Check collisions checkCollisions(); // Update player if (player) { player.update(); // Check if player fell off screen if (player.y > 2732 + 100) { player.die(); } } }; // Initialize the game when it loads initPlayer(); LK.playMusic('gameMusic');
===================================================================
--- original.js
+++ change.js
@@ -116,10 +116,11 @@
// Apply gravity
self.velocity += self.gravity;
self.y += self.velocity;
// Floor collision
- if (self.y > groundLevel) {
- self.y = groundLevel;
+ if (self.y > groundLevel - 50) {
+ // Adjust for player height
+ self.y = groundLevel - 50;
self.velocity = 0;
self.isJumping = false;
}
// Ceiling collision
@@ -153,9 +154,9 @@
var collectibles = [];
var score = 0;
var level = 1;
var gameSpeed = 1;
-var groundLevel = 2732 - 150;
+var groundLevel = 2732 - 100;
var gameActive = false;
var lastObstacleTime = 0;
var obstacleSpawnRate = 1500; // milliseconds
var collectibleSpawnRate = 3000; // milliseconds
@@ -189,9 +190,9 @@
// Initialize player
function initPlayer() {
player = new Player();
player.x = 400;
- player.y = groundLevel;
+ player.y = groundLevel - 50; // Position player to touch the ground accounting for anchor
game.addChild(player);
}
// Initialize game
function initGame() {