/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Define a class for coins
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Add rotation animation
self.update = function () {
coinGraphics.rotation += 0.1;
// Move coin left
self.x -= 3;
// Remove if off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.x -= self.speed;
// Walking animation - slight bounce
if (LK.ticks % 30 === 0) {
tween(enemyGraphics, {
scaleY: 0.9
}, {
duration: 200,
onFinish: function onFinish() {
tween(enemyGraphics, {
scaleY: 1.0
}, {
duration: 200
});
}
});
}
// Slight left-right sway
if (LK.ticks % 60 === 0) {
tween(enemyGraphics, {
rotation: 0.1
}, {
duration: 300,
onFinish: function onFinish() {
tween(enemyGraphics, {
rotation: -0.1
}, {
duration: 300,
onFinish: function onFinish() {
tween(enemyGraphics, {
rotation: 0
}, {
duration: 300
});
}
});
}
});
}
if (self.x < -50) {
self.destroy();
}
};
});
// Define a class for the left button
var LeftButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('leftButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.isPressed) {
player.x -= player.speed;
}
};
self.down = function (x, y, obj) {
self.isPressed = true;
};
self.up = function (x, y, obj) {
self.isPressed = false;
};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.jumpHeight = 25;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
if (self.y >= 2732 / 2) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
// Landing animation
tween(playerGraphics, {
scaleY: 0.8
}, {
duration: 100,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleY: 1.0
}, {
duration: 100
});
}
});
}
}
// Running animation when moving
if (leftButton && leftButton.isPressed || rightButton && rightButton.isPressed) {
// Bounce effect while running
if (LK.ticks % 20 === 0) {
tween(playerGraphics, {
scaleX: 1.1,
scaleY: 0.9
}, {
duration: 150,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
// Jump animation - stretch upward
tween(playerGraphics, {
scaleY: 1.2,
scaleX: 0.8
}, {
duration: 200,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleY: 1.0,
scaleX: 1.0
}, {
duration: 200
});
}
});
}
};
});
// Define a class for the right button
var RightButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('rightButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.isPressed) {
player.x += player.speed;
}
};
self.down = function (x, y, obj) {
self.isPressed = true;
};
self.up = function (x, y, obj) {
self.isPressed = false;
};
});
// Define a class for the up button
var UpButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upButton', {
anchorX: 0.5,
anchorY: 0.5
});
buttonGraphics.rotation = -Math.PI / 2; // Rotate 90 degrees counter-clockwise to point up
self.down = function (x, y, obj) {
player.jump();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
background.x = 0;
background.y = 0;
// Initialize player
var player = game.addChild(new Player());
// Initialize left and right buttons
var leftButton = game.addChild(new LeftButton());
leftButton.x = 100;
leftButton.y = 2732 - 300; // Move the button 200 pixels upwards
var rightButton = game.addChild(new RightButton());
rightButton.x = 2048 - 100;
rightButton.y = 2732 - 300; // Move the button 200 pixels upwards
var upButton = game.addChild(new UpButton());
upButton.x = 2048 / 2; // Center horizontally
upButton.y = 2732 - 300; // Same vertical position as other buttons
player.x = 2048 / 2;
player.y = 2732 / 2;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Initialize coins
var coins = [];
var coinSpawnInterval = 80;
var coinSpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
// Add the score text to the game GUI at the top center of the screen
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Handle game updates
game.update = function () {
player.update();
leftButton.update();
rightButton.update();
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2;
enemies.push(enemy);
game.addChild(enemy);
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
enemySpawnCounter = 0;
}
// Spawn coins
coinSpawnCounter++;
if (coinSpawnCounter >= coinSpawnInterval) {
var coin = new Coin();
coin.x = 2048;
coin.y = 2732 / 2; // Same level as player ground level
coins.push(coin);
game.addChild(coin);
coinSpawnInterval = Math.floor(Math.random() * 120) + 60;
coinSpawnCounter = 0;
}
// Update coins
for (var k = coins.length - 1; k >= 0; k--) {
coins[k].update();
if (player.intersects(coins[k])) {
// Store reference to coin before removing from array
var collectedCoin = coins[k];
// Remove from array first
coins.splice(k, 1);
// Coin collection animation
tween(collectedCoin, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
collectedCoin.destroy();
}
});
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
} else if (coins[k].x < -50) {
coins.splice(k, 1);
}
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
} else if (player.x > enemies[j].x && !enemies[j].passed) {
enemies[j].passed = true;
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
}
}
};
// Handle player jump - removed general touch jumping, only up button can trigger jump
game.down = function (x, y, obj) {
// Only the up button can trigger jumping now
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Define a class for coins
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Add rotation animation
self.update = function () {
coinGraphics.rotation += 0.1;
// Move coin left
self.x -= 3;
// Remove if off screen
if (self.x < -50) {
self.destroy();
}
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.x -= self.speed;
// Walking animation - slight bounce
if (LK.ticks % 30 === 0) {
tween(enemyGraphics, {
scaleY: 0.9
}, {
duration: 200,
onFinish: function onFinish() {
tween(enemyGraphics, {
scaleY: 1.0
}, {
duration: 200
});
}
});
}
// Slight left-right sway
if (LK.ticks % 60 === 0) {
tween(enemyGraphics, {
rotation: 0.1
}, {
duration: 300,
onFinish: function onFinish() {
tween(enemyGraphics, {
rotation: -0.1
}, {
duration: 300,
onFinish: function onFinish() {
tween(enemyGraphics, {
rotation: 0
}, {
duration: 300
});
}
});
}
});
}
if (self.x < -50) {
self.destroy();
}
};
});
// Define a class for the left button
var LeftButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('leftButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.isPressed) {
player.x -= player.speed;
}
};
self.down = function (x, y, obj) {
self.isPressed = true;
};
self.up = function (x, y, obj) {
self.isPressed = false;
};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.jumpHeight = 25;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
if (self.y >= 2732 / 2) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
// Landing animation
tween(playerGraphics, {
scaleY: 0.8
}, {
duration: 100,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleY: 1.0
}, {
duration: 100
});
}
});
}
}
// Running animation when moving
if (leftButton && leftButton.isPressed || rightButton && rightButton.isPressed) {
// Bounce effect while running
if (LK.ticks % 20 === 0) {
tween(playerGraphics, {
scaleX: 1.1,
scaleY: 0.9
}, {
duration: 150,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
// Jump animation - stretch upward
tween(playerGraphics, {
scaleY: 1.2,
scaleX: 0.8
}, {
duration: 200,
onFinish: function onFinish() {
tween(playerGraphics, {
scaleY: 1.0,
scaleX: 1.0
}, {
duration: 200
});
}
});
}
};
});
// Define a class for the right button
var RightButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('rightButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.isPressed) {
player.x += player.speed;
}
};
self.down = function (x, y, obj) {
self.isPressed = true;
};
self.up = function (x, y, obj) {
self.isPressed = false;
};
});
// Define a class for the up button
var UpButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upButton', {
anchorX: 0.5,
anchorY: 0.5
});
buttonGraphics.rotation = -Math.PI / 2; // Rotate 90 degrees counter-clockwise to point up
self.down = function (x, y, obj) {
player.jump();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
background.x = 0;
background.y = 0;
// Initialize player
var player = game.addChild(new Player());
// Initialize left and right buttons
var leftButton = game.addChild(new LeftButton());
leftButton.x = 100;
leftButton.y = 2732 - 300; // Move the button 200 pixels upwards
var rightButton = game.addChild(new RightButton());
rightButton.x = 2048 - 100;
rightButton.y = 2732 - 300; // Move the button 200 pixels upwards
var upButton = game.addChild(new UpButton());
upButton.x = 2048 / 2; // Center horizontally
upButton.y = 2732 - 300; // Same vertical position as other buttons
player.x = 2048 / 2;
player.y = 2732 / 2;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Initialize coins
var coins = [];
var coinSpawnInterval = 80;
var coinSpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
// Add the score text to the game GUI at the top center of the screen
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Handle game updates
game.update = function () {
player.update();
leftButton.update();
rightButton.update();
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2;
enemies.push(enemy);
game.addChild(enemy);
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
enemySpawnCounter = 0;
}
// Spawn coins
coinSpawnCounter++;
if (coinSpawnCounter >= coinSpawnInterval) {
var coin = new Coin();
coin.x = 2048;
coin.y = 2732 / 2; // Same level as player ground level
coins.push(coin);
game.addChild(coin);
coinSpawnInterval = Math.floor(Math.random() * 120) + 60;
coinSpawnCounter = 0;
}
// Update coins
for (var k = coins.length - 1; k >= 0; k--) {
coins[k].update();
if (player.intersects(coins[k])) {
// Store reference to coin before removing from array
var collectedCoin = coins[k];
// Remove from array first
coins.splice(k, 1);
// Coin collection animation
tween(collectedCoin, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
collectedCoin.destroy();
}
});
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
} else if (coins[k].x < -50) {
coins.splice(k, 1);
}
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
} else if (player.x > enemies[j].x && !enemies[j].passed) {
enemies[j].passed = true;
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
}
}
};
// Handle player jump - removed general touch jumping, only up button can trigger jump
game.down = function (x, y, obj) {
// Only the up button can trigger jumping now
};
2D Platformer Background.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A cool monster like 16 by 16 pixelated character no background shadows and highlights. In-Game asset. 2d. High contrast. No shadows. 2d pixelated in game asset
A cool platformer like 16 by 16 pixelated character no background shadows and highlights. In-Game asset. 2d. High contrast. No shadows. 2d pixelated in game asset no horns
A cool coin like 16 by 16 pixelated character no background shadows and highlights. In-Game asset. 2d. High contrast. No shadows. 2d pixelated in game asset