User prompt
Make the spike hitbox smaller
User prompt
Move the ground up by 15 units
User prompt
Move the ground up by 25 units
User prompt
Move the ground up by 50 units
User prompt
Move the ground 100 units down
User prompt
Make the player rotate right instead of left
User prompt
Remove the code that rotates the spikes
Remix started
Copy Geometry Dash
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Obstacle = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'spike'; var graphics = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); if (self.type === 'spike') { // Rotate spike to make it point upward graphics.rotation = Math.PI / 4; } self.speed = 10; self.active = true; self.update = function () { if (!self.active) { return; } self.x -= self.speed; // Remove when offscreen if (self.x < -graphics.width) { self.active = false; self.destroy(); } }; return self; }); var Platform = Obstacle.expand(function () { var self = Obstacle.call(this, 'platform'); self.yOffset = 0; self.moving = Math.random() > 0.7; self.moveDirection = 1; self.moveSpeed = 2; self.moveRange = 100; self.initialY = 0; var superUpdate = self.update; self.update = function () { superUpdate.call(self); if (self.moving && self.active) { self.yOffset += self.moveDirection * self.moveSpeed; if (Math.abs(self.yOffset) > self.moveRange) { self.moveDirection *= -1; } self.y = self.initialY + self.yOffset; } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 0; self.gravity = 0.8; self.jumpForce = -18; self.onGround = false; self.isDead = false; self.rotation = 0; self.jump = function () { if (self.onGround && !self.isDead) { self.velocity = self.jumpForce; self.onGround = false; LK.getSound('jump').play(); // Rotate the player tween.stop(self, { rotation: true }); tween(self, { rotation: self.rotation - Math.PI * 2 }, { duration: 500, easing: tween.linear }); } }; self.die = function () { if (!self.isDead) { self.isDead = true; LK.getSound('death').play(); LK.effects.flashObject(self, 0xff0000, 500); // Show death animation tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 800, easing: tween.easeOut, onFinish: function onFinish() { LK.showGameOver(); } }); } }; self.update = function () { if (self.isDead) { return; } // Apply gravity self.velocity += self.gravity; self.y += self.velocity; // Check ground collision if (self.y > groundLevel - playerGraphics.height / 2) { self.y = groundLevel - playerGraphics.height / 2; self.velocity = 0; self.onGround = true; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x121212 }); /**** * Game Code ****/ // Game variables var gameSpeed = 10; var groundLevel = 2500; var obstacleSpawnRate = 90; var score = 0; var highScore = storage.highScore || 0; var obstacles = []; var backgroundTiles = []; var groundTiles = []; var platformHeight = 350; var lastObstacleType = ''; var player; var groundTileWidth = 300; var dragNode = null; // Set up background var background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // Create ground function createGround() { var numTiles = Math.ceil(2048 / groundTileWidth) + 2; for (var i = 0; i < numTiles; i++) { var groundTile = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: i * groundTileWidth, y: groundLevel }); game.addChild(groundTile); groundTiles.push(groundTile); } } // Create the player function createPlayer() { player = new Player(); player.x = 300; player.y = groundLevel - 200; game.addChild(player); player.down = function () { player.jump(); }; } // Create scoring UI var scoreText = new Text2('Score: 0', { size: 70, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var highScoreText = new Text2('Best: ' + highScore, { size: 50, fill: 0xCCCCCC }); highScoreText.anchor.set(0.5, 0); highScoreText.y = 80; LK.gui.top.addChild(highScoreText); // Update score function updateScore() { score++; scoreText.setText('Score: ' + score); if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreText.setText('Best: ' + highScore); } } // Create obstacles function createObstacle() { var type; // Avoid consecutive same obstacles do { var rand = Math.random(); type = rand < 0.6 ? 'spike' : 'platform'; } while (type === lastObstacleType); lastObstacleType = type; if (type === 'spike') { var obstacle = new Obstacle('spike'); obstacle.x = 2048 + 50; obstacle.y = groundLevel - obstacle.height / 2; game.addChild(obstacle); obstacles.push(obstacle); } else { var platform = new Platform(); platform.x = 2048 + 50; // Random height for platforms var platformY = groundLevel - platformHeight - Math.random() * 250; platform.y = platformY; platform.initialY = platformY; game.addChild(platform); obstacles.push(platform); } } // Check for collisions function checkCollisions() { if (player.isDead) { return; } for (var i = 0; i < obstacles.length; i++) { var obstacle = obstacles[i]; if (player.intersects(obstacle)) { if (obstacle.type === 'spike') { player.die(); return; } else if (obstacle.type === 'platform') { // Only consider standing on top of platforms var playerBottom = player.y + player.height / 2; var platformTop = obstacle.y - obstacle.height / 2; // Check if player is above platform and falling down if (player.velocity > 0 && playerBottom >= platformTop && playerBottom <= platformTop + Math.abs(player.velocity) + 5) { player.y = platformTop - player.height / 2; player.velocity = 0; player.onGround = true; } else { // Side collision with platform player.die(); return; } } } } } // Move ground tiles function moveGround() { for (var i = 0; i < groundTiles.length; i++) { var tile = groundTiles[i]; tile.x -= gameSpeed; // If the tile is completely off-screen, move it to the right if (tile.x <= -groundTileWidth) { var lastTileX = -Infinity; // Find the rightmost tile for (var j = 0; j < groundTiles.length; j++) { if (groundTiles[j].x > lastTileX) { lastTileX = groundTiles[j].x; } } // Place this tile after the rightmost one tile.x = lastTileX + groundTileWidth; } } } // Clear game state function resetGame() { // Clear obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; // Reset score score = 0; scoreText.setText('Score: 0'); // Reset player if (player) { player.destroy(); } createPlayer(); } // Start the game function startGame() { createGround(); createPlayer(); // Start game music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.5, duration: 1000 } }); } // Main update loop game.update = function () { // Move ground moveGround(); // Spawn obstacles if (LK.ticks % obstacleSpawnRate === 0) { createObstacle(); } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obstacle = obstacles[i]; if (!obstacle.active) { obstacles.splice(i, 1); } } // Check collisions checkCollisions(); // Update score periodically if (LK.ticks % 30 === 0 && !player.isDead) { updateScore(); } // Gradually increase game difficulty if (LK.ticks % 600 === 0 && gameSpeed < 18) { gameSpeed += 0.5; // Update obstacle speed for (var i = 0; i < obstacles.length; i++) { obstacles[i].speed = gameSpeed; } // Reduce spawn rate to increase difficulty if (obstacleSpawnRate > 45) { obstacleSpawnRate -= 5; } } }; // Handle input game.down = function (x, y, obj) { player.jump(); }; // Initialize the game startGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'spike';
var graphics = self.attachAsset(self.type, {
anchorX: 0.5,
anchorY: 0.5
});
if (self.type === 'spike') {
// Rotate spike to make it point upward
graphics.rotation = Math.PI / 4;
}
self.speed = 10;
self.active = true;
self.update = function () {
if (!self.active) {
return;
}
self.x -= self.speed;
// Remove when offscreen
if (self.x < -graphics.width) {
self.active = false;
self.destroy();
}
};
return self;
});
var Platform = Obstacle.expand(function () {
var self = Obstacle.call(this, 'platform');
self.yOffset = 0;
self.moving = Math.random() > 0.7;
self.moveDirection = 1;
self.moveSpeed = 2;
self.moveRange = 100;
self.initialY = 0;
var superUpdate = self.update;
self.update = function () {
superUpdate.call(self);
if (self.moving && self.active) {
self.yOffset += self.moveDirection * self.moveSpeed;
if (Math.abs(self.yOffset) > self.moveRange) {
self.moveDirection *= -1;
}
self.y = self.initialY + self.yOffset;
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = 0;
self.gravity = 0.8;
self.jumpForce = -18;
self.onGround = false;
self.isDead = false;
self.rotation = 0;
self.jump = function () {
if (self.onGround && !self.isDead) {
self.velocity = self.jumpForce;
self.onGround = false;
LK.getSound('jump').play();
// Rotate the player
tween.stop(self, {
rotation: true
});
tween(self, {
rotation: self.rotation - Math.PI * 2
}, {
duration: 500,
easing: tween.linear
});
}
};
self.die = function () {
if (!self.isDead) {
self.isDead = true;
LK.getSound('death').play();
LK.effects.flashObject(self, 0xff0000, 500);
// Show death animation
tween(self, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
LK.showGameOver();
}
});
}
};
self.update = function () {
if (self.isDead) {
return;
}
// Apply gravity
self.velocity += self.gravity;
self.y += self.velocity;
// Check ground collision
if (self.y > groundLevel - playerGraphics.height / 2) {
self.y = groundLevel - playerGraphics.height / 2;
self.velocity = 0;
self.onGround = true;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x121212
});
/****
* Game Code
****/
// Game variables
var gameSpeed = 10;
var groundLevel = 2500;
var obstacleSpawnRate = 90;
var score = 0;
var highScore = storage.highScore || 0;
var obstacles = [];
var backgroundTiles = [];
var groundTiles = [];
var platformHeight = 350;
var lastObstacleType = '';
var player;
var groundTileWidth = 300;
var dragNode = null;
// Set up background
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(background);
// Create ground
function createGround() {
var numTiles = Math.ceil(2048 / groundTileWidth) + 2;
for (var i = 0; i < numTiles; i++) {
var groundTile = LK.getAsset('ground', {
anchorX: 0,
anchorY: 0,
x: i * groundTileWidth,
y: groundLevel
});
game.addChild(groundTile);
groundTiles.push(groundTile);
}
}
// Create the player
function createPlayer() {
player = new Player();
player.x = 300;
player.y = groundLevel - 200;
game.addChild(player);
player.down = function () {
player.jump();
};
}
// Create scoring UI
var scoreText = new Text2('Score: 0', {
size: 70,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var highScoreText = new Text2('Best: ' + highScore, {
size: 50,
fill: 0xCCCCCC
});
highScoreText.anchor.set(0.5, 0);
highScoreText.y = 80;
LK.gui.top.addChild(highScoreText);
// Update score
function updateScore() {
score++;
scoreText.setText('Score: ' + score);
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
highScoreText.setText('Best: ' + highScore);
}
}
// Create obstacles
function createObstacle() {
var type;
// Avoid consecutive same obstacles
do {
var rand = Math.random();
type = rand < 0.6 ? 'spike' : 'platform';
} while (type === lastObstacleType);
lastObstacleType = type;
if (type === 'spike') {
var obstacle = new Obstacle('spike');
obstacle.x = 2048 + 50;
obstacle.y = groundLevel - obstacle.height / 2;
game.addChild(obstacle);
obstacles.push(obstacle);
} else {
var platform = new Platform();
platform.x = 2048 + 50;
// Random height for platforms
var platformY = groundLevel - platformHeight - Math.random() * 250;
platform.y = platformY;
platform.initialY = platformY;
game.addChild(platform);
obstacles.push(platform);
}
}
// Check for collisions
function checkCollisions() {
if (player.isDead) {
return;
}
for (var i = 0; i < obstacles.length; i++) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
if (obstacle.type === 'spike') {
player.die();
return;
} else if (obstacle.type === 'platform') {
// Only consider standing on top of platforms
var playerBottom = player.y + player.height / 2;
var platformTop = obstacle.y - obstacle.height / 2;
// Check if player is above platform and falling down
if (player.velocity > 0 && playerBottom >= platformTop && playerBottom <= platformTop + Math.abs(player.velocity) + 5) {
player.y = platformTop - player.height / 2;
player.velocity = 0;
player.onGround = true;
} else {
// Side collision with platform
player.die();
return;
}
}
}
}
}
// Move ground tiles
function moveGround() {
for (var i = 0; i < groundTiles.length; i++) {
var tile = groundTiles[i];
tile.x -= gameSpeed;
// If the tile is completely off-screen, move it to the right
if (tile.x <= -groundTileWidth) {
var lastTileX = -Infinity;
// Find the rightmost tile
for (var j = 0; j < groundTiles.length; j++) {
if (groundTiles[j].x > lastTileX) {
lastTileX = groundTiles[j].x;
}
}
// Place this tile after the rightmost one
tile.x = lastTileX + groundTileWidth;
}
}
}
// Clear game state
function resetGame() {
// Clear obstacles
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
obstacles = [];
// Reset score
score = 0;
scoreText.setText('Score: 0');
// Reset player
if (player) {
player.destroy();
}
createPlayer();
}
// Start the game
function startGame() {
createGround();
createPlayer();
// Start game music
LK.playMusic('gameMusic', {
fade: {
start: 0,
end: 0.5,
duration: 1000
}
});
}
// Main update loop
game.update = function () {
// Move ground
moveGround();
// Spawn obstacles
if (LK.ticks % obstacleSpawnRate === 0) {
createObstacle();
}
// Update obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (!obstacle.active) {
obstacles.splice(i, 1);
}
}
// Check collisions
checkCollisions();
// Update score periodically
if (LK.ticks % 30 === 0 && !player.isDead) {
updateScore();
}
// Gradually increase game difficulty
if (LK.ticks % 600 === 0 && gameSpeed < 18) {
gameSpeed += 0.5;
// Update obstacle speed
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = gameSpeed;
}
// Reduce spawn rate to increase difficulty
if (obstacleSpawnRate > 45) {
obstacleSpawnRate -= 5;
}
}
};
// Handle input
game.down = function (x, y, obj) {
player.jump();
};
// Initialize the game
startGame();
Geometry dash ground. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Background with lots of squares. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Platform. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows