User prompt
fix that the speechbubble is shown
User prompt
if the player hits a revolvingplanet, increase the score
User prompt
set the revolvingplanet to visible false, if the player collides with it
Code edit (4 edits merged)
Please save this source code
User prompt
Only check collision with planets which are visible
User prompt
if the revolvingplanet.parentPlanet respawns make sure to make it visible again
Code edit (1 edits merged)
Please save this source code
User prompt
Migrate to the latest version of LK
User prompt
play the jump sound whenver the player jumps
User prompt
add a sound "collect" and play it when the player collides with the revolvingplanet
User prompt
play a sound gameover when the game is over
User prompt
play a sound impact when the player collides lands on a planet
User prompt
Please fix the bug: 'TypeError: Cannot read properties of null (reading 'x')' in or related to this line: 'var dx = player.x - currentPlanet.x;' Line Number: 154
Code edit (1 edits merged)
Please save this source code
User prompt
add a music "flower" and play it at game start
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught TypeError: LK.playMusic is not a function' in or related to this line: 'LK.playMusic('flower');' Line Number: 162
/****
* Classes
****/
// Assets will be automatically created based on usage in the code.
// Planet class for the planets the player will jump between
var Planet = Container.expand(function () {
var self = Container.call(this);
this.planetGraphics = self.attachAsset('planet', {
anchorX: 0.5,
anchorY: 0.5
});
// Scale the planet size randomly from 20 to 100%
var scale = Math.random() * 0.8 + 0.2; // Generate a random scale between 0.2 (20%) and 1.0 (100%)
this.planetGraphics.scale.set(scale, scale); // Apply the scale to the planet
self.radius = this.planetGraphics.width / 2 * scale; // Adjust the planet radius based on the scale
self.update = function () {
self.y += self.speed; // Move the planet down each tick
if (self.y > 2732 + self.height / 2) {
// If the planet moved out of the screen
self.y = -self.height / 2; // It should appear on top again
self.x = Math.random() * (2048 - player.width * 2) + player.width; // With a different x position - randomly, ensuring at least player's width margin to the game sides
}
};
self.speed = Math.random() * 3 + 2; // Assign a random speed between 2 and 5 to each planet
});
// Player class for the main character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.onGround = false;
self.velocity = {
x: 0,
y: 0
};
self.speechBubble = self.attachAsset('speechBubble', {
anchorX: 0.5,
anchorY: 1.0
});
self.speechBubble.visible = false;
self.jump = function (power, angle) {
if (self.onGround) {
self.velocity.x = power * Math.cos(angle);
self.velocity.y = power * Math.sin(angle);
self.onGround = false;
}
};
self.update = function () {
self.x += self.velocity.x;
self.y += self.velocity.y;
self.velocity.y += 0.98; // Gravity effect
self.speechBubble.visible = true;
};
});
// RevolvingPlanet class for the planets that revolve around other planets
var RevolvingPlanet = Container.expand(function () {
var self = Container.call(this);
self.planetGraphics = self.attachAsset('revolvingPlanet', {
anchorX: 0.5,
anchorY: 0.5
});
self.parentPlanet = null;
self.angle = Math.random() * Math.PI * 2; // Assign a random initial angle
self.distance = Math.random() * 200 + 100; // Assign a random distance from the parent planet
self.speed = Math.random() * 0.02 + 0.01; // Assign a random speed
self.update = function () {
if (self.parentPlanet) {
self.angle += self.speed; // Update the angle
self.x = self.parentPlanet.x + Math.cos(self.angle) * self.distance; // Update the x position
self.y = self.parentPlanet.y + Math.sin(self.angle) * self.distance; // Update the y position
}
};
});
/****
* Initialize Game
****/
// Initialize a Text2 object to display the score
// Add the score text to the GUI overlay.
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Initialize a Text2 object to display the score
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0); // Sets anchor to the center of the top edge of the text.
LK.gui.top.addChild(scoreTxt);
var planets = [];
var background = game.attachAsset('background', {
anchorX: 0.0,
anchorY: 0.0
});
var player;
var jumpPower = 20;
var currentPlanet;
function setupGame() {
// Create player
player = new Player();
player.x = 1024; // Start in the middle of the screen horizontally
player.y = 1366; // Start in the middle of the screen vertically
game.addChild(player);
// Create planets
for (var i = 0; i < 8; i++) {
var planet = new Planet();
planet.x = Math.random() * (2048 - player.width) + player.width / 2; // Ensure planet's x position leaves some margin of the player's width to the screens side
planet.y = Math.random() * 2732;
game.addChild(planet);
planets.push(planet);
// Create revolving planets for some of the planets
if (Math.random() < 0.3) {
// 30% chance to create a revolving planet
var revolvingPlanet = new RevolvingPlanet();
revolvingPlanet.parentPlanet = planet;
var scale = planet.planetGraphics.scale.x / 2; // Scale the revolving planet to half the size of the parent planet
revolvingPlanet.planetGraphics.scale.set(scale, scale);
game.addChild(revolvingPlanet);
planets.push(revolvingPlanet);
}
}
// Create player
planets[0].x = 1024; // Start the first planet in the middle of the screen horizontally
planets[0].y = 1366; // Start the first planet in the middle of the screen vertically
currentPlanet = planets[0];
// Setup touch event to make the player jump
game.on('down', function (obj) {
var dx = player.x - currentPlanet.x;
var dy = player.y - currentPlanet.y;
var angle = Math.atan2(dy, dx);
currentPlanet = null;
player.jump(jumpPower, angle);
});
}
function checkCollisions() {
planets.forEach(function (planet) {
var dx = player.x - planet.x;
var dy = player.y - planet.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < player.width / 2 + planet.radius) {
if (!player.onGround) {
// Increase score when player lands on a planet
LK.setScore(LK.getScore() + 1);
// Update the score display
scoreTxt.setText(LK.getScore());
}
player.onGround = true;
player.velocity.y = 0;
currentPlanet = planet;
player.speechBubble.visible = false;
}
});
}
LK.on('tick', function () {
if (!player.onGround) {
player.x += player.velocity.x;
player.y += player.velocity.y;
player.speechBubble.visible = true;
} else {
if (currentPlanet) {
var dx = player.x - currentPlanet.x;
var dy = player.y - currentPlanet.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var angle = Math.atan2(dy, dx);
player.x = currentPlanet.x + (currentPlanet.radius + player.width / 2) * Math.cos(angle + 0.1);
player.y = currentPlanet.y + (currentPlanet.radius + player.width / 2) * Math.sin(angle + 0.1);
}
}
planets.forEach(function (planet) {
planet.update();
});
checkCollisions();
// Check if the player is out of the screen
if (player.x < 0 || player.x > 2048 || player.y < 0 || player.y > 2732) {
// End the game
LK.showGameOver();
}
});
setupGame();
planet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. transparent background
monkey astronaut. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. transparent background
space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. transparent background
speech bubble saying "wee". game asset. 2d. 8bit. no background. transparent background.
banana. game asset. 2d. 8bit. no background. transparent background.