User prompt
quiero que el fondo no sea transparente
User prompt
quiero que quites todo el texto del fondo que no sea el titulo y el boron de start game
User prompt
haz que el fondo ocupe toda la pantalla
User prompt
haz el fonndo mas grande por la parte de abajo
User prompt
quiero que agreges un fondo atras del texto de la pantalla de inicio
User prompt
puedes agregar una pantalla de inicio, que este antes de el juego
User prompt
Please fix the bug: 'Uncaught TypeError: LK.pauseGame is not a function' in or related to this line: 'LK.pauseGame();' Line Number: 623
User prompt
quiero que a la derecha agreges un boton de pausa
User prompt
ahora quiero que al agarrar una moneda ejecute un sonido
User prompt
osea tengan una rotacion como las rocas
User prompt
quiero que giren diferente ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
no tanto
User prompt
quiero que las monedas caigan mas rapido
User prompt
okey, ahora quiero que tambien caigan monedas, y el score aumente solo si agarras monedas
User prompt
creo que el comando te salio mal, quiero que la nave apunte hacia donde se diriga el mouse, apunte con la parte superior
User prompt
quiero que la nave apunte hacia donde va el mouse
User prompt
pero solo rocas grandes, no pequeñas, las pequeñas aparezcan normal
User prompt
quiero que mientras mas altitud tengas mas rocas aparezcan
User prompt
Quiero que toda la particula sea del mismo color, "naranja"
User prompt
broo quita esas particulas verdes
User prompt
porque se puso de color verde, dije amarillo, naranja y rojo
User prompt
que las particulas, sean de color naranja y amarilo
User prompt
mejor que sean de color naranja
User prompt
que sean de color rojo
User prompt
quiero que las particulas se vean un poco mas
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Asteroid = Container.expand(function () {
var self = Container.call(this);
var asteroidGraphics = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3.0,
scaleY: 3.0
});
self.speed = 12 + Math.random() * 10;
self.rotationSpeed = (Math.random() - 0.5) * 0.1;
self.update = function () {
self.y += self.speed;
asteroidGraphics.rotation += self.rotationSpeed;
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 2.5
});
self.speed = 8 + Math.random() * 4;
self.rotationSpeed = (Math.random() - 0.5) * 0.1;
// Add floating animation
self.floatDirection = 1;
self.floatSpeed = 0.03 + Math.random() * 0.02;
self.floatAmount = 12 + Math.random() * 8;
self.floatTimer = Math.random() * 120;
self.update = function () {
self.y += self.speed;
coinGraphics.rotation += self.rotationSpeed;
// Add floating effect
self.floatTimer += self.floatSpeed;
var floatOffset = Math.sin(self.floatTimer) * self.floatAmount;
coinGraphics.y = floatOffset;
};
return self;
});
var Debris = Container.expand(function () {
var self = Container.call(this);
var debrisGraphics = self.attachAsset('debris', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
// Make medium debris darker
debrisGraphics.tint = 0x404040;
self.speed = 10 + Math.random() * 8;
self.horizontalSpeed = (Math.random() - 0.5) * 2;
self.update = function () {
self.y += self.speed;
self.x += self.horizontalSpeed;
};
return self;
});
var Fuel = Container.expand(function () {
var self = Container.call(this);
var fuelGraphics = self.attachAsset('fuel', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3.0,
scaleY: 3.0
});
self.speed = 9 + Math.random() * 6;
// Start floating animation
self.floatDirection = 1;
self.floatSpeed = 0.02 + Math.random() * 0.02;
self.floatAmount = 15 + Math.random() * 10;
self.originalY = 0;
self.floatTimer = Math.random() * 120;
// Add diverse rotation properties
self.rotationSpeed = (Math.random() - 0.5) * 0.04; // Random speed between -0.02 and 0.02
self.rotationDirection = Math.random() > 0.5 ? 1 : -1; // Random direction
self.update = function () {
self.y += self.speed;
// Add floating effect
self.floatTimer += self.floatSpeed;
var floatOffset = Math.sin(self.floatTimer) * self.floatAmount;
fuelGraphics.y = floatOffset;
// Add diverse rotation
fuelGraphics.rotation += self.rotationSpeed * self.rotationDirection;
};
return self;
});
var Spaceship = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('spaceship', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 2.0
});
self.speed = 0;
self.maxSpeed = 8;
self.acceleration = 0.3;
self.friction = 0.85;
self.targetX = 1024; // Default center position
self.update = function () {
// Smoothly move towards target position
var deltaX = self.targetX - self.x;
self.x += deltaX * 0.2; // Smooth interpolation factor
// Keep ship within bounds
if (self.x < 40) {
self.x = 40;
}
if (self.x > 2008) {
self.x = 2008;
}
};
self.moveLeft = function () {
self.speed = Math.max(self.speed - self.acceleration, -self.maxSpeed);
};
self.moveRight = function () {
self.speed = Math.min(self.speed + self.acceleration, self.maxSpeed);
};
self.setTargetX = function (x) {
self.targetX = x;
};
return self;
});
var Spark = Container.expand(function () {
var self = Container.call(this);
var sparkGraphics = self.attachAsset('debris', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2 + Math.random() * 0.3,
scaleY: 0.5 + Math.random() * 0.6
});
// Make all sparks orange color
sparkGraphics.tint = 0xff6600;
self.speed = 8 + Math.random() * 6;
self.horizontalSpeed = (Math.random() - 0.5) * 4;
self.life = 30 + Math.random() * 20;
self.maxLife = self.life;
self.update = function () {
self.y += self.speed;
self.x += self.horizontalSpeed;
self.life--;
// Fade out over time with higher minimum opacity
self.alpha = Math.max(0.3, self.life / self.maxLife);
// Scale down over time but maintain larger minimum size
var scale = Math.max(0.2, self.life / self.maxLife * 0.5);
sparkGraphics.scaleX = scale;
sparkGraphics.scaleY = scale;
};
return self;
});
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.attachAsset('debris', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2 + Math.random() * 0.3,
scaleY: 0.2 + Math.random() * 0.3
});
// Make stars white and bright
starGraphics.tint = 0xffffff;
self.speed = 3 + Math.random() * 4;
self.twinkleTimer = Math.random() * 120;
self.maxAlpha = 0.8 + Math.random() * 0.2;
self.alpha = self.maxAlpha;
self.update = function () {
self.y += self.speed;
// Twinkling effect
self.twinkleTimer += 1;
var twinkle = Math.sin(self.twinkleTimer * 0.05) * 0.3 + 0.7;
self.alpha = self.maxAlpha * twinkle;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
// Game state management
var gameStarted = false;
var startScreen = null;
var startButton = null;
var spaceship = new Spaceship();
var obstacles = [];
var stars = [];
var sparks = [];
var scrollSpeed = 6;
var spawnTimer = 0;
var spawnRate = 120; // frames between spawns
var gameSpeed = 1;
var altitude = 0;
var lastTouchX = null;
var isDragging = false;
var maxHealth = 100;
var currentHealth = 100;
var healthBarBg;
var healthBarFill;
var maxFuel = 100;
var currentFuel = 100;
var fuelBarBg;
var fuelBarFill;
var fuelConsumptionRate = 0.15; // Fuel consumed per frame
var fuelPickups = [];
var coins = [];
// Create horizontal bar behind spaceship
var spaceshipBar = LK.getAsset('spaceshipBar', {
anchorX: 0.5,
anchorY: 0.5
});
spaceshipBar.x = 1024;
spaceshipBar.y = 2400;
spaceshipBar.alpha = 0.5; // Make bar even more transparent
game.addChild(spaceshipBar);
// Position spaceship
spaceship.x = 1024;
spaceship.y = 2400;
game.addChild(spaceship);
// Create score display
var scoreText = new Text2('Altitude: 0m', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create altitude display
var altitudeText = new Text2('Score: 0', {
size: 50,
fill: 0xFFFFFF
});
altitudeText.anchor.set(0.5, 0);
altitudeText.y = 80;
LK.gui.top.addChild(altitudeText);
// Create health bar background
healthBarBg = LK.getAsset('healthBarBg', {
anchorX: 0.5,
anchorY: 0.0
});
healthBarBg.x = 1024;
healthBarBg.y = 200;
game.addChild(healthBarBg);
// Create health bar fill
healthBarFill = LK.getAsset('healthBarFill', {
anchorX: 0.5,
anchorY: 0.0
});
healthBarFill.x = 1024;
healthBarFill.y = 202;
game.addChild(healthBarFill);
// Create fuel bar background
fuelBarBg = LK.getAsset('fuelBarBg', {
anchorX: 0.5,
anchorY: 0.0
});
fuelBarBg.x = 150;
fuelBarBg.y = 300;
game.addChild(fuelBarBg);
// Create fuel bar fill
fuelBarFill = LK.getAsset('fuelBarFill', {
anchorX: 0.5,
anchorY: 0.0
});
fuelBarFill.x = 150;
fuelBarFill.y = 302;
game.addChild(fuelBarFill);
// Create fuel icon below fuel bar
var fuelIcon = LK.getAsset('fuel', {
anchorX: 0.5,
anchorY: 0.0,
scaleX: 2.5,
scaleY: 2.5
});
fuelIcon.x = 150;
fuelIcon.y = 1850; // Position below the fuel bar
game.addChild(fuelIcon);
// Start pulsing animation for fuel icon
function startFuelIconPulse() {
tween(fuelIcon, {
scaleX: 2.0,
scaleY: 2.0
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(fuelIcon, {
scaleX: 2.5,
scaleY: 2.5
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: startFuelIconPulse
});
}
});
}
startFuelIconPulse();
function createObstacle() {
var obstacle;
if (Math.random() < 0.7) {
obstacle = new Asteroid();
} else {
obstacle = new Debris();
}
obstacle.x = Math.random() * (2048 - 100) + 50;
obstacle.y = -50;
obstacles.push(obstacle);
game.addChild(obstacle);
// Z-index management: larger objects (asteroids) should render above smaller objects (debris)
// Find the correct index to insert this obstacle
var targetIndex = game.getChildIndex(obstacle); // Start with current index
var maxIndex = game.children.length - 1;
// Only reorder if we have other obstacles to compare with
if (obstacle instanceof Asteroid) {
// Asteroids should be above debris - find the highest debris index
for (var j = 0; j < game.children.length; j++) {
var child = game.children[j];
if (child instanceof Debris) {
targetIndex = Math.min(j + 1, maxIndex);
}
}
} else if (obstacle instanceof Debris) {
// Debris should be below asteroids - find the lowest asteroid index
for (var j = 0; j < game.children.length; j++) {
var child = game.children[j];
if (child instanceof Asteroid) {
targetIndex = Math.max(j - 1, 0);
break; // Insert before first asteroid
}
}
}
// Ensure targetIndex is within valid bounds
targetIndex = Math.max(0, Math.min(targetIndex, maxIndex));
game.setChildIndex(obstacle, targetIndex);
}
function handleTouch(x, y) {
// Directly set spaceship target to cursor position
spaceship.setTargetX(x);
}
game.down = function (x, y, obj) {
if (!gameStarted) {
// Check if start button was clicked
if (startButton && x >= startButton.x - 440 && x <= startButton.x + 440 && y >= startButton.y - 30 && y <= startButton.y + 30) {
gameStarted = true;
removeStartScreen();
}
return;
}
isDragging = true;
lastTouchX = x;
handleTouch(x, y);
};
game.move = function (x, y, obj) {
if (!gameStarted) return;
// Always follow cursor, not just when dragging
handleTouch(x, y);
};
game.up = function (x, y, obj) {
isDragging = false;
lastTouchX = null;
};
game.update = function () {
if (!gameStarted) {
// Only update twinkling stars on start screen
if (LK.ticks % 15 === 0) {
var star = new Star();
star.x = Math.random() * 2048;
star.y = -10;
stars.push(star);
game.addChild(star);
// Move star behind everything
game.setChildIndex(star, 0);
}
// Update and cleanup stars
for (var s = stars.length - 1; s >= 0; s--) {
var star = stars[s];
if (star.lastY === undefined) star.lastY = star.y;
if (star.lastY < 2800 && star.y >= 2800) {
star.destroy();
stars.splice(s, 1);
continue;
}
star.lastY = star.y;
}
return;
}
// Update altitude only
altitude += scrollSpeed;
// Update displays
scoreText.setText('Altitude: ' + Math.floor(altitude) + 'm');
altitudeText.setText('Score: ' + LK.getScore());
// Increase difficulty over time
if (LK.ticks % 600 === 0) {
// Every 10 seconds
gameSpeed += 0.1;
scrollSpeed = Math.min(scrollSpeed + 0.3, 10);
spawnRate = Math.max(spawnRate - 5, 30);
}
// Spawn obstacles - increase frequency based on altitude
spawnTimer++;
// Calculate dynamic spawn rate based on altitude
var altitudeBasedSpawnRate = Math.max(spawnRate - Math.floor(altitude / 500), 15); // Decrease spawn rate (increase frequency) every 500m altitude, minimum 15 frames
if (spawnTimer >= altitudeBasedSpawnRate) {
// Spawn normal obstacle first
createObstacle();
// Spawn additional large asteroids based on altitude (not small debris)
var extraAsteroidCount = Math.floor(altitude / 2000); // Add extra asteroid every 2000m altitude
for (var obs = 0; obs < extraAsteroidCount; obs++) {
// Force spawn only asteroids for altitude-based increases
var asteroid = new Asteroid();
asteroid.x = Math.random() * (2048 - 100) + 50;
asteroid.y = -50;
obstacles.push(asteroid);
game.addChild(asteroid);
// Z-index management for asteroids
var targetIndex = game.getChildIndex(asteroid);
var maxIndex = game.children.length - 1;
for (var j = 0; j < game.children.length; j++) {
var child = game.children[j];
if (child instanceof Debris) {
targetIndex = Math.min(j + 1, maxIndex);
}
}
targetIndex = Math.max(0, Math.min(targetIndex, maxIndex));
game.setChildIndex(asteroid, targetIndex);
}
spawnTimer = 0;
}
// Consume fuel constantly
currentFuel -= fuelConsumptionRate;
if (currentFuel < 0) currentFuel = 0;
// Update fuel bar
var fuelPercent = currentFuel / maxFuel;
fuelBarFill.scaleY = fuelPercent;
fuelBarFill.y = 302 + 1596 * (1 - fuelPercent);
// Fuel bar maintains original blue color - no color changes
// Lose health when out of fuel
if (currentFuel <= 0) {
currentHealth -= 1;
// Update health bar
var healthPercent = currentHealth / maxHealth;
healthBarFill.scaleX = healthPercent;
healthBarFill.x = 1024 - 148 + 296 * healthPercent * 0.5;
// Check if health is depleted
if (currentHealth <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Spawn fuel pickups occasionally
if (LK.ticks % 300 === 0) {
// Every 5 seconds
var fuelPickup = new Fuel();
fuelPickup.x = Math.random() * (2048 - 100) + 50;
fuelPickup.y = -50;
fuelPickups.push(fuelPickup);
game.addChild(fuelPickup);
}
// Spawn coins regularly
if (LK.ticks % 180 === 0) {
// Every 3 seconds
var coin = new Coin();
coin.x = Math.random() * (2048 - 100) + 50;
coin.y = -50;
coins.push(coin);
game.addChild(coin);
}
// Update fuel pickups and check collisions
for (var f = fuelPickups.length - 1; f >= 0; f--) {
var fuelPickup = fuelPickups[f];
// Track last position for cleanup
if (fuelPickup.lastY === undefined) fuelPickup.lastY = fuelPickup.y;
// Remove fuel pickups that are off screen
if (fuelPickup.lastY < 2800 && fuelPickup.y >= 2800) {
fuelPickup.destroy();
fuelPickups.splice(f, 1);
continue;
}
// Check collision with spaceship
if (fuelPickup.intersects(spaceship)) {
// Completely refill fuel
currentFuel = maxFuel;
LK.getSound('fuel_pickup').play();
fuelPickup.destroy();
fuelPickups.splice(f, 1);
continue;
}
fuelPickup.lastY = fuelPickup.y;
}
// Update coins and check collisions
for (var c = coins.length - 1; c >= 0; c--) {
var coin = coins[c];
// Track last position for cleanup
if (coin.lastY === undefined) coin.lastY = coin.y;
// Remove coins that are off screen
if (coin.lastY < 2800 && coin.y >= 2800) {
coin.destroy();
coins.splice(c, 1);
continue;
}
// Check collision with spaceship
if (coin.intersects(spaceship)) {
// Increase score when collecting coin
LK.setScore(LK.getScore() + 1);
LK.getSound('coin_collect').play();
coin.destroy();
coins.splice(c, 1);
continue;
}
coin.lastY = coin.y;
}
// Update obstacles and check collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
// Track last position for cleanup
if (obstacle.lastY === undefined) obstacle.lastY = obstacle.y;
// Remove obstacles that are off screen
if (obstacle.lastY < 2800 && obstacle.y >= 2800) {
obstacle.destroy();
obstacles.splice(i, 1);
continue;
}
// Check collision with spaceship
if (obstacle.intersects(spaceship)) {
// Only deal damage if it's an asteroid (not small debris or stars)
if (obstacle instanceof Asteroid) {
// Reduce health instead of immediate game over
currentHealth -= 20;
// Update health bar
var healthPercent = currentHealth / maxHealth;
healthBarFill.scaleX = healthPercent;
healthBarFill.x = 1024 - 148 + 296 * healthPercent * 0.5;
// Flash screen red briefly
LK.effects.flashScreen(0xff0000, 300);
LK.getSound('explosion').play();
// Check if health is depleted
if (currentHealth <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
// Remove only asteroids that hit us
obstacle.destroy();
obstacles.splice(i, 1);
continue;
}
}
obstacle.lastY = obstacle.y;
}
// Spawn beautiful twinkling stars
if (LK.ticks % 15 === 0) {
var star = new Star();
star.x = Math.random() * 2048;
star.y = -10;
stars.push(star);
game.addChild(star);
// Move star behind spaceship bar
game.setChildIndex(star, 0);
}
// Update stars and remove off-screen ones
for (var s = stars.length - 1; s >= 0; s--) {
var star = stars[s];
// Track last position for cleanup
if (star.lastY === undefined) star.lastY = star.y;
// Remove stars that are off screen
if (star.lastY < 2800 && star.y >= 2800) {
star.destroy();
stars.splice(s, 1);
continue;
}
star.lastY = star.y;
}
// Spawn fire sparks from spaceship thrusters
if (LK.ticks % 3 === 0) {
// Create 2-3 sparks every few frames
var sparkCount = 2 + Math.floor(Math.random() * 2);
for (var sp = 0; sp < sparkCount; sp++) {
var spark = new Spark();
// Position sparks at bottom of spaceship with some spread
spark.x = spaceship.x + (Math.random() - 0.5) * 60;
spark.y = spaceship.y + 60; // Bottom of spaceship
sparks.push(spark);
game.addChild(spark);
}
}
// Move spaceship elements to front every frame to stay above obstacles
game.setChildIndex(spaceshipBar, game.children.length - 1);
game.setChildIndex(spaceship, game.children.length - 1);
// Move all sparks to front to stay above obstacles
for (var sp = 0; sp < sparks.length; sp++) {
var spark = sparks[sp];
if (spark.parent === game) {
game.setChildIndex(spark, game.children.length - 1);
}
}
// Update sparks and remove dead ones
for (var k = sparks.length - 1; k >= 0; k--) {
var spark = sparks[k];
// Remove sparks that are dead or off screen
if (spark.life <= 0 || spark.y > 2800) {
spark.destroy();
sparks.splice(k, 1);
continue;
}
}
};
// Pause functionality is handled automatically by LK engine
function createStartScreen() {
// Create semi-transparent background
startScreen = LK.getAsset('spaceshipBar', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 137.0
});
startScreen.x = 1024;
startScreen.y = 1366;
startScreen.alpha = 0.8;
startScreen.tint = 0x000033;
game.addChild(startScreen);
// Create background for text content
var textBackground = LK.getAsset('startScreenBg', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.28,
scaleY: 2.732
});
textBackground.x = 1024;
textBackground.y = 1366;
textBackground.alpha = 0.7;
game.addChild(textBackground);
// Create title text
var titleText = new Text2('SPACE NAVIGATOR', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 800;
game.addChild(titleText);
// Create subtitle text
var subtitleText = new Text2('Navigate through space\navoiding asteroids and debris', {
size: 60,
fill: 0xAAAAAAA
});
subtitleText.anchor.set(0.5, 0.5);
subtitleText.x = 1024;
subtitleText.y = 1000;
game.addChild(subtitleText);
// Create start button
startButton = LK.getAsset('spaceshipBar', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.4,
scaleY: 3.0
});
startButton.x = 1024;
startButton.y = 1500;
startButton.tint = 0x00AA00;
game.addChild(startButton);
// Create button text
var buttonText = new Text2('START GAME', {
size: 80,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = 1024;
buttonText.y = 1500;
game.addChild(buttonText);
// Create instructions
var instructionsText = new Text2('Touch and drag to move your spaceship\nCollect fuel and coins\nAvoid asteroids', {
size: 50,
fill: 0x888888
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 1024;
instructionsText.y = 1800;
game.addChild(instructionsText);
// Store references for cleanup
startScreen.titleText = titleText;
startScreen.subtitleText = subtitleText;
startScreen.buttonText = buttonText;
startScreen.instructionsText = instructionsText;
startScreen.textBackground = textBackground;
}
function removeStartScreen() {
if (startScreen) {
startScreen.destroy();
startScreen.titleText.destroy();
startScreen.subtitleText.destroy();
startScreen.buttonText.destroy();
startScreen.instructionsText.destroy();
startScreen.textBackground.destroy();
startButton.destroy();
startScreen = null;
startButton = null;
}
}
// Initialize start screen
createStartScreen();
// Start background music
LK.playMusic('space_music');
; ===================================================================
--- original.js
+++ change.js
@@ -635,13 +635,13 @@
// Create background for text content
var textBackground = LK.getAsset('startScreenBg', {
anchorX: 0.5,
anchorY: 0.5,
- scaleX: 1.0,
- scaleY: 1.5
+ scaleX: 1.28,
+ scaleY: 2.732
});
textBackground.x = 1024;
- textBackground.y = 1200;
+ textBackground.y = 1366;
textBackground.alpha = 0.7;
game.addChild(textBackground);
// Create title text
var titleText = new Text2('SPACE NAVIGATOR', {