/****
* 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_migrated = 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
// If the planet has a revolving planet, make it visible again
if (self.revolvingPlanet) {
self.revolvingPlanet.visible = true;
}
}
};
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;
LK.getSound('jump').play();
}
};
self._update_migrated = 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_migrated = 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);
revolvingPlanet.radius = revolvingPlanet.planetGraphics.width / 2 * scale;
game.addChild(revolvingPlanet);
planets.push(revolvingPlanet);
planet.revolvingPlanet = 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 (x, y, obj) {
var dx = currentPlanet ? player.x - currentPlanet.x : 0;
var dy = player.y - currentPlanet.y;
var angle = Math.atan2(dy, dx);
currentPlanet = null;
player.jump(jumpPower, angle);
});
LK.getSound('flower').play();
}
function checkCollisions() {
planets.forEach(function (planet) {
if (planet.visible) {
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 || planet instanceof RevolvingPlanet) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
if (planet instanceof RevolvingPlanet) {
planet.visible = false;
LK.getSound('collect').play();
} else {
player.onGround = true;
player.velocity.y = 0;
currentPlanet = planet;
player.speechBubble.visible = false;
LK.getSound('impact').play();
}
}
}
}
});
}
LK.on('tick', function () {
if (!player.onGround) {
player.x += player.velocity.x;
player.y += player.velocity.y;
} 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_migrated();
});
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.getSound('gameover').play();
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.