User prompt
add running animation to the player ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
drop a meteor after every 200 point collected
User prompt
add some clouds
Code edit (1 edits merged)
Please save this source code
User prompt
Endless Runner
Initial prompt
make a game like google dinosour game
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
var obstacleType = type || 'ground';
if (obstacleType === 'ground') {
var obstacleGraphics = self.attachAsset('groundObstacle', {
anchorX: 0.5,
anchorY: 1.0
});
self.height = 80;
} else {
var obstacleGraphics = self.attachAsset('airObstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.height = 40;
}
self.obstacleType = obstacleType;
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.isJumping = false;
self.isDucking = false;
self.jumpVelocity = 0;
self.gravity = 1.2;
self.jumpPower = -18;
self.normalHeight = 80;
self.duckHeight = 40;
self.groundY = 0;
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.jumpVelocity = self.jumpPower;
LK.getSound('jump').play();
}
};
self.startDuck = function () {
if (!self.isDucking && !self.isJumping) {
self.isDucking = true;
playerGraphics.height = self.duckHeight;
LK.getSound('duck').play();
}
};
self.stopDuck = function () {
if (self.isDucking) {
self.isDucking = false;
playerGraphics.height = self.normalHeight;
}
};
self.update = function () {
if (self.isJumping) {
self.jumpVelocity += self.gravity;
self.y += self.jumpVelocity;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.isJumping = false;
self.jumpVelocity = 0;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var gameSpeed = 8;
var speedIncrement = 0.01;
var maxSpeed = 20;
var groundY = 2732 - 200;
var obstacles = [];
var obstacleSpawnTimer = 0;
var obstacleSpawnDelay = 90;
var minSpawnDelay = 45;
var distance = 0;
var isGameRunning = true;
var isPressed = false;
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: groundY + 20
}));
// Create player
var player = game.addChild(new Player());
player.x = 300;
player.y = groundY;
player.groundY = groundY;
// Create score display
var scoreText = new Text2('0', {
size: 100,
fill: 0x000000
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create distance display
var distanceText = new Text2('0m', {
size: 60,
fill: 0x333333
});
distanceText.anchor.set(1, 0);
distanceText.x = -20;
distanceText.y = 20;
LK.gui.topRight.addChild(distanceText);
function spawnObstacle() {
var obstacleType = Math.random() < 0.6 ? 'ground' : 'air';
var obstacle = new Obstacle(obstacleType);
obstacle.x = 2048 + 100;
if (obstacleType === 'ground') {
obstacle.y = groundY;
} else {
obstacle.y = groundY - 120;
}
obstacle.speed = gameSpeed;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function checkCollisions() {
for (var i = 0; i < obstacles.length; i++) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
LK.getSound('hit').play();
isGameRunning = false;
LK.showGameOver();
return;
}
}
}
function updateObstacles() {
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
obstacle.speed = gameSpeed;
if (obstacle.x < -100) {
obstacle.destroy();
obstacles.splice(i, 1);
LK.setScore(LK.getScore() + 10);
}
}
}
function updateGameSpeed() {
if (gameSpeed < maxSpeed) {
gameSpeed += speedIncrement;
}
if (obstacleSpawnDelay > minSpawnDelay) {
obstacleSpawnDelay = Math.max(minSpawnDelay, 90 - distance / 100);
}
}
game.down = function (x, y, obj) {
if (isGameRunning) {
isPressed = true;
player.jump();
}
};
game.up = function (x, y, obj) {
isPressed = false;
if (isGameRunning) {
player.stopDuck();
}
};
game.update = function () {
if (!isGameRunning) return;
// Handle ducking
if (isPressed && !player.isJumping) {
player.startDuck();
} else if (!isPressed) {
player.stopDuck();
}
// Update distance and score
distance += gameSpeed * 0.1;
distanceText.setText(Math.floor(distance) + 'm');
scoreText.setText(LK.getScore());
// Spawn obstacles
obstacleSpawnTimer++;
if (obstacleSpawnTimer >= obstacleSpawnDelay) {
spawnObstacle();
obstacleSpawnTimer = 0;
}
// Update game elements
updateObstacles();
updateGameSpeed();
checkCollisions();
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,206 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Obstacle = Container.expand(function (type) {
+ var self = Container.call(this);
+ var obstacleType = type || 'ground';
+ if (obstacleType === 'ground') {
+ var obstacleGraphics = self.attachAsset('groundObstacle', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.height = 80;
+ } else {
+ var obstacleGraphics = self.attachAsset('airObstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.height = 40;
+ }
+ self.obstacleType = obstacleType;
+ self.speed = gameSpeed;
+ self.update = function () {
+ self.x -= self.speed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.isJumping = false;
+ self.isDucking = false;
+ self.jumpVelocity = 0;
+ self.gravity = 1.2;
+ self.jumpPower = -18;
+ self.normalHeight = 80;
+ self.duckHeight = 40;
+ self.groundY = 0;
+ self.jump = function () {
+ if (!self.isJumping) {
+ self.isJumping = true;
+ self.jumpVelocity = self.jumpPower;
+ LK.getSound('jump').play();
+ }
+ };
+ self.startDuck = function () {
+ if (!self.isDucking && !self.isJumping) {
+ self.isDucking = true;
+ playerGraphics.height = self.duckHeight;
+ LK.getSound('duck').play();
+ }
+ };
+ self.stopDuck = function () {
+ if (self.isDucking) {
+ self.isDucking = false;
+ playerGraphics.height = self.normalHeight;
+ }
+ };
+ self.update = function () {
+ if (self.isJumping) {
+ self.jumpVelocity += self.gravity;
+ self.y += self.jumpVelocity;
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.isJumping = false;
+ self.jumpVelocity = 0;
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var gameSpeed = 8;
+var speedIncrement = 0.01;
+var maxSpeed = 20;
+var groundY = 2732 - 200;
+var obstacles = [];
+var obstacleSpawnTimer = 0;
+var obstacleSpawnDelay = 90;
+var minSpawnDelay = 45;
+var distance = 0;
+var isGameRunning = true;
+var isPressed = false;
+// Create ground
+var ground = game.addChild(LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: groundY + 20
+}));
+// Create player
+var player = game.addChild(new Player());
+player.x = 300;
+player.y = groundY;
+player.groundY = groundY;
+// Create score display
+var scoreText = new Text2('0', {
+ size: 100,
+ fill: 0x000000
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+// Create distance display
+var distanceText = new Text2('0m', {
+ size: 60,
+ fill: 0x333333
+});
+distanceText.anchor.set(1, 0);
+distanceText.x = -20;
+distanceText.y = 20;
+LK.gui.topRight.addChild(distanceText);
+function spawnObstacle() {
+ var obstacleType = Math.random() < 0.6 ? 'ground' : 'air';
+ var obstacle = new Obstacle(obstacleType);
+ obstacle.x = 2048 + 100;
+ if (obstacleType === 'ground') {
+ obstacle.y = groundY;
+ } else {
+ obstacle.y = groundY - 120;
+ }
+ obstacle.speed = gameSpeed;
+ obstacles.push(obstacle);
+ game.addChild(obstacle);
+}
+function checkCollisions() {
+ for (var i = 0; i < obstacles.length; i++) {
+ var obstacle = obstacles[i];
+ if (player.intersects(obstacle)) {
+ LK.getSound('hit').play();
+ isGameRunning = false;
+ LK.showGameOver();
+ return;
+ }
+ }
+}
+function updateObstacles() {
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ obstacle.speed = gameSpeed;
+ if (obstacle.x < -100) {
+ obstacle.destroy();
+ obstacles.splice(i, 1);
+ LK.setScore(LK.getScore() + 10);
+ }
+ }
+}
+function updateGameSpeed() {
+ if (gameSpeed < maxSpeed) {
+ gameSpeed += speedIncrement;
+ }
+ if (obstacleSpawnDelay > minSpawnDelay) {
+ obstacleSpawnDelay = Math.max(minSpawnDelay, 90 - distance / 100);
+ }
+}
+game.down = function (x, y, obj) {
+ if (isGameRunning) {
+ isPressed = true;
+ player.jump();
+ }
+};
+game.up = function (x, y, obj) {
+ isPressed = false;
+ if (isGameRunning) {
+ player.stopDuck();
+ }
+};
+game.update = function () {
+ if (!isGameRunning) return;
+ // Handle ducking
+ if (isPressed && !player.isJumping) {
+ player.startDuck();
+ } else if (!isPressed) {
+ player.stopDuck();
+ }
+ // Update distance and score
+ distance += gameSpeed * 0.1;
+ distanceText.setText(Math.floor(distance) + 'm');
+ scoreText.setText(LK.getScore());
+ // Spawn obstacles
+ obstacleSpawnTimer++;
+ if (obstacleSpawnTimer >= obstacleSpawnDelay) {
+ spawnObstacle();
+ obstacleSpawnTimer = 0;
+ }
+ // Update game elements
+ updateObstacles();
+ updateGameSpeed();
+ checkCollisions();
+};
\ No newline at end of file
brick layer. In-Game asset. 2d. High contrast. No shadows
green road. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
pine tree. In-Game asset. 2d. High contrast. No shadows
running dinosour. In-Game asset. 2d. High contrast. No shadows
draw realistic cloud. In-Game asset. 2d. High contrast. No shadows
draw a falling meteor. In-Game asset. 2d. High contrast. No shadows