User prompt
Update with: platform.x = lastPlatformX + (platform.width / 2);
User prompt
Update as needed with: // In the platform spawning code if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position exactly at the end of the last platform using the actual platform width platform.x = lastPlatformX + platform.width; // Rest of code stays the same // ... lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
User prompt
Update with: // In the initializeGame function for (var i = 0; i < 5; i++) { var platform = new Platform(); if (i === 0) { // First platform placed with player at a good position platform.x = player.x; } else { // For subsequent platforms, position edge-to-edge using the actual platform width platform.x = lastPlatformX + platform.width; } platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; }
User prompt
Replace this section: // If on a platform, check if we're still above it if (self.currentPlatform) { // Check if still above the platform var platformHalfWidth = self.currentPlatform.width / 2; var stillOnPlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth; if (!stillOnPlatform) { // CRUCIAL FIX: Check for other platforms before falling var foundAnotherPlatform = false; // Loop through all platforms to check if we're above any other platform for (var i = 0; i < platforms.length; i++) { var otherPlatform = platforms[i]; // Skip checking the current platform if (otherPlatform === self.currentPlatform) continue; var otherHalfWidth = otherPlatform.width / 2; // Check if player is above this platform (using same horizontal check) if (self.x > otherPlatform.x - otherHalfWidth && self.x < otherPlatform.x + otherHalfWidth) { // We found another platform directly below player self.currentPlatform = otherPlatform; foundAnotherPlatform = true; break; } } // Only fall if we didn't find another platform if (!foundAnotherPlatform) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } } };
User prompt
Update with: // If on a platform, check if we're still above it if (self.currentPlatform) { // Check if still above the platform var platformHalfWidth = self.currentPlatform.width / 2; var stillOnPlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth; if (!stillOnPlatform) { // Before falling, check if there's another platform we should transition to var foundNextPlatform = false; // Check all platforms for a possible transition for (var i = 0; i < platforms.length; i++) { var nextPlatform = platforms[i]; if (nextPlatform !== self.currentPlatform) { var nextPlatformHalfWidth = nextPlatform.width / 2; // Check if player position is above the next platform // Use the same y-coordinate check as the current platform if (self.x > nextPlatform.x - nextPlatformHalfWidth && self.x < nextPlatform.x + nextPlatformHalfWidth && Math.abs(nextPlatform.y - self.currentPlatform.y) < 10) { // Same height (with tolerance) // Found an adjacent platform, transition to it self.currentPlatform = nextPlatform; foundNextPlatform = true; break; } } } // Only fall if we couldn't find a platform to transition to if (!foundNextPlatform) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } }
User prompt
Update with: if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position the new platform exactly one platform width away from the last one // This ensures there are no gaps between platforms platform.x = lastPlatformX + platform.width; // Determine the height (rest of the code remains the same) if (lastPlatformHeight === lowPlatformHeight) { platform.y = highPlatformHeight; lastPlatformHeight = highPlatformHeight; } else { platform.y = lowPlatformHeight; lastPlatformHeight = lowPlatformHeight; } // Store last platform position lastPlatformX = platform.x; // Add the platform to the game platforms.push(platform); game.addChild(platform); // Reset counter platformSpawnCounter = 0; }
User prompt
Update with: // In the initializeGame function for (var i = 0; i < 5; i++) { var platform = new Platform(); // If this is the first platform, position it based on the player's position if (i === 0) { platform.x = player.x; } else { // For subsequent platforms, position them exactly one platform width away from the previous one // Since platforms are anchored at center, we add the full width to get from center to center platform.x = lastPlatformX + platform.width; } platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; }
User prompt
Update with: // If on a platform, check if we're still above it if (self.currentPlatform) { // Check if still above the platform var platformHalfWidth = self.currentPlatform.width / 2; var stillOnPlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth; if (!stillOnPlatform) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } }
User prompt
Update with: game.update = function () { player.update(); // Spawn platforms platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Important: Position the platform EXACTLY at the end of the previous one platform.x = lastPlatformX + platformWidth; // Alternate between platform heights only when we've placed enough platforms // to complete the current "section" of platforms if (platformSpawnCounter >= platformSpawnInterval) { if (lastPlatformHeight === lowPlatformHeight) { platform.y = highPlatformHeight; lastPlatformHeight = highPlatformHeight; } else { platform.y = lowPlatformHeight; lastPlatformHeight = lowPlatformHeight; } } else { // Continue with the current height platform.y = lastPlatformHeight; } // Store last platform position lastPlatformX = platform.x; // Add the platform to the game platforms.push(platform); game.addChild(platform); // Reset counter platformSpawnCounter = 0; }
User prompt
Update with: function initializeGame() { // Create initial platforms at the low level for (var i = 0; i < 5; i++) { var platform = new Platform(); // Place platforms exactly end-to-end // Start with the player's position minus some offset to ensure player starts on platform platform.x = (player.x - 250) + (i * platformWidth); platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } // Initialize platform height tracking lastPlatformHeight = lowPlatformHeight; // Initialize the player to start on a platform player.isOnGround = true; player.currentPlatform = platforms[0]; }
User prompt
Please fix the bug: 'Can't find variable: platformWidth' in or related to this line: 'platform.x = player.x + i * platformWidth; // No gap between platforms' Line Number: 255
User prompt
Update with: function initializeGame() { // Create initial platforms at the low level for (var i = 0; i < 5; i++) { var platform = new Platform(); platform.x = player.x + (i * platformWidth); // No gap between platforms platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } // Initialize platform height tracking lastPlatformHeight = lowPlatformHeight; // Initialize the player to start on a platform player.isOnGround = true; player.currentPlatform = platforms[0]; }
User prompt
Update with: game.update = function () { player.update(); // Spawn platforms platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position the platform at the end of the last one with no gap platform.x = lastPlatformX + platformWidth; // Alternate between platform heights, but only when switching levels if (lastPlatformHeight === lowPlatformHeight) { platform.y = highPlatformHeight; lastPlatformHeight = highPlatformHeight; } else { platform.y = lowPlatformHeight; lastPlatformHeight = lowPlatformHeight; } // Store last platform position lastPlatformX = platform.x; // Add the platform to the game platforms.push(platform); game.addChild(platform); // Reset counter platformSpawnCounter = 0; }
Code edit (8 edits merged)
Please save this source code
User prompt
Update with: self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; // The offset should match exactly how the player aligns with the lower platform initially var playerPlatformOffset = 250; // This is the exact offset between player.y and lowPlatformHeight // Check if player is above the platform and falling if (self.velocityY > 0 && // Must be falling down self.y < platform.y - playerPlatformOffset && self.y + self.velocityY >= platform.y - playerPlatformOffset && self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Land on the platform with the exact same positioning as on the low platform self.y = platform.y - playerPlatformOffset; self.velocityY = 0; self.isJumping = false; self.isOnGround = true; self.currentPlatform = platform; return; } } };
User prompt
Update with: self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; // Define the collision threshold based on player sprite height var collisionOffset = 80; // This value represents how far above the platform the player should stand // Check if player is above the platform and falling if (self.velocityY > 0 && // Must be falling down self.y < platform.y - collisionOffset && self.y + self.velocityY >= platform.y - collisionOffset && self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Land on the platform with consistent positioning self.y = platform.y - collisionOffset; self.velocityY = 0; self.isJumping = false; self.isOnGround = true; self.currentPlatform = platform; return; // Exit after finding a collision } } };
User prompt
Update with: self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; // Check if player is above the platform and falling if (self.velocityY > 0 && // Must be falling down self.y < platform.y - 40 && // Increased collision threshold from 10 to 40 self.y + self.velocityY >= platform.y - 40 && self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Land on the platform self.y = platform.y - 40; // Adjust landing position to match detection threshold self.velocityY = 0; self.isJumping = false; self.isOnGround = true; self.currentPlatform = platform; return; // Exit after finding a collision } } };
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: self.sprites[self.runFrame] is undefined' in or related to this line: 'self.sprites[self.runFrame].alpha = 1;' Line Number: 135
User prompt
Please fix the bug: 'TypeError: self.sprites[self.runFrame] is undefined' in or related to this line: 'self.sprites[self.runFrame].alpha = 1;' Line Number: 108
User prompt
Please fix the bug: 'TypeError: self.sprites is undefined' in or related to this line: 'for (var i = 0; i < self.sprites.length; i++) {' Line Number: 62
Code edit (4 edits merged)
Please save this source code
User prompt
set background color to black
Code edit (1 edits merged)
Please save this source code
/**** * Classes ****/ // Define a class for enemies 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; if (self.x < -50) { self.destroy(); } }; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.passed = false; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); //<Assets used in the game will automatically appear here> var Player = Container.expand(function () { var self = Container.call(this); // Animation properties self.runAnimation = ['playerrun1', 'playerrun2', 'playerrun3', 'playerrun4', 'playerrun5', 'playerrun6']; self.jumpAnimation = ['playerjump1', 'playerjump2', 'playerjump3']; self.runFrame = 0; self.animationSpeed = 0.08; self.animationCounter = 0; self.sprites = []; self.groundY = 2732 / 1.5; // Store the ground position // Platform collision properties self.isOnGround = true; self.currentPlatform = null; // Pre-attach all animation frames but make only the first one visible // First add run animation sprites for (var i = 0; i < self.runAnimation.length; i++) { var sprite = self.attachAsset(self.runAnimation[i], { anchorX: 0.5, anchorY: 0.5 }); // Set all frames except the first to be invisible sprite.alpha = i === 0 ? 1 : 0; self.sprites.push(sprite); } // Then add jump animation sprites for (var i = 0; i < self.jumpAnimation.length; i++) { var sprite = self.attachAsset(self.jumpAnimation[i], { anchorX: 0.5, anchorY: 0.5 }); // Set all jump frames to invisible initially sprite.alpha = 0; self.sprites.push(sprite); } // Movement properties self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.jumpState = "none"; // Added to track jump animation phases self.jumpStartTime = 0; self.update = function () { // Hide all sprites first for (var i = 0; i < self.sprites.length; i++) { self.sprites[i].alpha = 0; } // Apply gravity if not on a platform and not actively jumping if (!self.isOnGround && !self.isJumping) { self.velocityY += 0.7; self.y += self.velocityY; // Show falling animation (using jump3) var jumpOffset = self.runAnimation.length; self.sprites[jumpOffset + 2].alpha = 1; // jump3 // Check for platform collisions while falling self.checkPlatformCollision(); } // Check if player has fallen off the bottom of the screen if (self.y > 2732) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Handle jumping physics and animation if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Get jump frame index offset var jumpOffset = self.runAnimation.length; // Determine jump animation based on velocity and time var currentTime = Date.now(); if (currentTime - self.jumpStartTime < 100) { // Brief initial jump1 phase (first 100ms) self.sprites[jumpOffset + 0].alpha = 1; // jump1 } else if (self.velocityY < 0) { // Going up - show jump2 self.sprites[jumpOffset + 1].alpha = 1; // jump2 } else if (self.velocityY > 0) { // Going down - show jump3 self.sprites[jumpOffset + 2].alpha = 1; // jump3 // Check for landing on platforms while falling during a jump self.checkPlatformCollision(); } // End jump if hitting the original ground (for backward compatibility) if (self.y >= self.groundY && !self.currentPlatform) { self.y = self.groundY; self.isJumping = false; self.velocityY = 0; self.jumpState = "none"; self.isOnGround = true; } } else if (self.isOnGround) { // Run animation when on a platform or ground self.animationCounter += self.animationSpeed; if (self.animationCounter >= 1) { self.animationCounter = 0; // Update to next frame self.runFrame = (self.runFrame + 1) % self.runAnimation.length; } // Show current run frame self.sprites[self.runFrame].alpha = 1; } // If on a platform, move with it if (self.currentPlatform) { // Move with platform speed self.x -= self.currentPlatform.speed; // Check if still on platform if (self.x < self.currentPlatform.x - 50 || self.x > self.currentPlatform.x + 50) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } }; self.jump = function () { if (self.isOnGround) { self.isJumping = true; self.isOnGround = false; self.velocityY = -self.jumpHeight; self.jumpState = "start"; self.jumpStartTime = Date.now(); self.currentPlatform = null; } else if (self.isJumping && self.velocityY < 10) { // Allow for a small double-jump to reach higher platforms // Only if not falling too fast self.velocityY = -self.jumpHeight * 0.7; self.jumpStartTime = Date.now(); } }; self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; // Check if player is above the platform and falling if (self.velocityY > 0 && // Must be falling down self.y < platform.y - 10 && self.y + self.velocityY >= platform.y - 10 && self.x > platform.x - 50 && self.x < platform.x + 50) { // Land on the platform self.y = platform.y - 10; // Position slightly above platform self.velocityY = 0; self.isJumping = false; self.isOnGround = true; self.currentPlatform = platform; return; // Exit after finding a collision } } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Black background }); /**** * Game Code ****/ var platforms = []; var platformSpawnInterval = 60; var platformSpawnCounter = 0; var currentPlatformHeight = 2732 / 1.5; // Starting at player level var isHighPlatformMode = false; var highPlatformTimer = 0; var highPlatformDuration = 0; var lastPlatformX = 0; //<Assets used in the game will automatically appear here> var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, alpha: 0 })); background.x = 0; background.y = 0; // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 4.5; player.y = 2732 / 1.5; // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Create a new Text2 object to display the score var scoreText = new Text2('0', { size: 100, fill: 0xFFFFFF }); // Add the score text to the game GUI at the top center of the screen LK.gui.top.addChild(scoreText); scoreText.x = 2048 / 2; scoreText.y = 0; // Initialize the game with starting platforms function initializeGame() { // Create initial platforms for (var i = 0; i < 5; i++) { var platform = new Platform(); platform.x = player.x + i * 200; // Place platforms end-to-end (platform width) platform.y = player.y + 250; // Position below player (player feet) platforms.push(platform); game.addChild(platform); } // Initialize the player to start on a platform player.isOnGround = true; player.currentPlatform = platforms[0]; // Set initial high platform duration highPlatformDuration = Math.floor(Math.random() * 500) + 300; } initializeGame(); // Handle game updates game.update = function () { player.update(); if (player.x !== 2048 / 4.5) { player.x = 2048 / 4.5; } // Spawn platforms platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Calculate x position based on the last platform's position // Platform width is 1000, so place new platform at the end of the previous one platform.x = lastPlatformX > 0 ? lastPlatformX + 1000 : 2048 + 50; // Determine platform height based on current mode if (isHighPlatformMode) { platform.y = currentPlatformHeight - 600; // Higher platform } else { platform.y = currentPlatformHeight; // Regular height } // Store last platform position for spacing lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); // Set a fixed interval since we're connecting platforms platformSpawnInterval = 50; // Adjust based on speed and platform width platformSpawnCounter = 0; } // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); // Remove platforms that are destroyed if (platforms[i].destroyed) { platforms.splice(i, 1); } } // Handle high platform mode timing // Handle high platform mode timing highPlatformTimer++; if (highPlatformTimer >= highPlatformDuration) { // Don't immediately toggle - create transition if (isHighPlatformMode) { // Set the new lower platform height (returning to ground) currentPlatformHeight = 2732 / 1.5; highPlatformDuration = Math.floor(Math.random() * 500) + 300; // Create a downward stair of platforms var transitionPlatforms = 3; // Number of steps for (var i = 0; i < transitionPlatforms; i++) { var platform = new Platform(); platform.x = lastPlatformX + (i + 1) * 1000; platform.y = 2732 / 1.5 - 600 + (i + 1) * (600 / transitionPlatforms); platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } } else { // Set the new higher platform height currentPlatformHeight = 2732 / 1.5 - 600; highPlatformDuration = Math.floor(Math.random() * 300) + 200; // Create an upward stair of platforms var transitionPlatforms = 3; // Number of steps for (var i = 0; i < transitionPlatforms; i++) { var platform = new Platform(); platform.x = lastPlatformX + (i + 1) * 1000; platform.y = 2732 / 1.5 - (i + 1) * (600 / transitionPlatforms); platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } } isHighPlatformMode = !isHighPlatformMode; highPlatformTimer = 0; } // Enemy handling (keep your existing enemy code) //enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2; enemies.push(enemy); game.addChild(enemy); enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // 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 game.down = function (x, y, obj) { player.jump(); };
===================================================================
--- original.js
+++ change.js
@@ -40,9 +40,12 @@
self.runFrame = 0;
self.animationSpeed = 0.08;
self.animationCounter = 0;
self.sprites = [];
- self.groundY = 2732 / 2; // Store the ground position
+ self.groundY = 2732 / 1.5; // Store the ground position
+ // Platform collision properties
+ self.isOnGround = true;
+ self.currentPlatform = null;
// Pre-attach all animation frames but make only the first one visible
// First add run animation sprites
for (var i = 0; i < self.runAnimation.length; i++) {
var sprite = self.attachAsset(self.runAnimation[i], {
@@ -74,8 +77,23 @@
// Hide all sprites first
for (var i = 0; i < self.sprites.length; i++) {
self.sprites[i].alpha = 0;
}
+ // Apply gravity if not on a platform and not actively jumping
+ if (!self.isOnGround && !self.isJumping) {
+ self.velocityY += 0.7;
+ self.y += self.velocityY;
+ // Show falling animation (using jump3)
+ var jumpOffset = self.runAnimation.length;
+ self.sprites[jumpOffset + 2].alpha = 1; // jump3
+ // Check for platform collisions while falling
+ self.checkPlatformCollision();
+ }
+ // Check if player has fallen off the bottom of the screen
+ if (self.y > 2732) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ }
// Handle jumping physics and animation
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7;
@@ -88,28 +106,24 @@
self.sprites[jumpOffset + 0].alpha = 1; // jump1
} else if (self.velocityY < 0) {
// Going up - show jump2
self.sprites[jumpOffset + 1].alpha = 1; // jump2
- } else if (self.velocityY > 0 && self.y < self.groundY - 5) {
- // Going down but not near landing - show jump3
+ } else if (self.velocityY > 0) {
+ // Going down - show jump3
self.sprites[jumpOffset + 2].alpha = 1; // jump3
- } else if (self.y >= self.groundY - 5) {
- // About to land - show jump1 briefly
- self.sprites[jumpOffset + 0].alpha = 1; // jump1
- // Make sure player doesn't go below ground
- if (self.y > self.groundY) {
- self.y = self.groundY;
- }
- // Schedule return to running after a brief moment
- LK.setTimeout(function () {
- self.isJumping = false;
- self.velocityY = 0;
- self.jumpState = "none";
- self.y = self.groundY; // Ensure player is at exact ground level
- }, 50); // Very short duration for jump1 at the end
+ // Check for landing on platforms while falling during a jump
+ self.checkPlatformCollision();
}
- } else {
- // Run animation when not jumping
+ // End jump if hitting the original ground (for backward compatibility)
+ if (self.y >= self.groundY && !self.currentPlatform) {
+ self.y = self.groundY;
+ self.isJumping = false;
+ self.velocityY = 0;
+ self.jumpState = "none";
+ self.isOnGround = true;
+ }
+ } else if (self.isOnGround) {
+ // Run animation when on a platform or ground
self.animationCounter += self.animationSpeed;
if (self.animationCounter >= 1) {
self.animationCounter = 0;
// Update to next frame
@@ -117,17 +131,53 @@
}
// Show current run frame
self.sprites[self.runFrame].alpha = 1;
}
+ // If on a platform, move with it
+ if (self.currentPlatform) {
+ // Move with platform speed
+ self.x -= self.currentPlatform.speed;
+ // Check if still on platform
+ if (self.x < self.currentPlatform.x - 50 || self.x > self.currentPlatform.x + 50) {
+ self.isOnGround = false;
+ self.currentPlatform = null;
+ // Start falling
+ self.velocityY = 0.1;
+ }
+ }
};
self.jump = function () {
- if (!self.isJumping) {
+ if (self.isOnGround) {
self.isJumping = true;
+ self.isOnGround = false;
self.velocityY = -self.jumpHeight;
self.jumpState = "start";
- self.jumpStartTime = Date.now(); // Record when jump started
+ self.jumpStartTime = Date.now();
+ self.currentPlatform = null;
+ } else if (self.isJumping && self.velocityY < 10) {
+ // Allow for a small double-jump to reach higher platforms
+ // Only if not falling too fast
+ self.velocityY = -self.jumpHeight * 0.7;
+ self.jumpStartTime = Date.now();
}
};
+ self.checkPlatformCollision = function () {
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ // Check if player is above the platform and falling
+ if (self.velocityY > 0 &&
+ // Must be falling down
+ self.y < platform.y - 10 && self.y + self.velocityY >= platform.y - 10 && self.x > platform.x - 50 && self.x < platform.x + 50) {
+ // Land on the platform
+ self.y = platform.y - 10; // Position slightly above platform
+ self.velocityY = 0;
+ self.isJumping = false;
+ self.isOnGround = true;
+ self.currentPlatform = platform;
+ return; // Exit after finding a collision
+ }
+ }
+ };
});
/****
* Initialize Game
@@ -176,10 +226,10 @@
function initializeGame() {
// Create initial platforms
for (var i = 0; i < 5; i++) {
var platform = new Platform();
- platform.x = player.x + i * 150; // Spaced out platforms
- platform.y = player.y; // At player level
+ platform.x = player.x + i * 200; // Place platforms end-to-end (platform width)
+ platform.y = player.y + 250; // Position below player (player feet)
platforms.push(platform);
game.addChild(platform);
}
// Initialize the player to start on a platform
@@ -187,16 +237,22 @@
player.currentPlatform = platforms[0];
// Set initial high platform duration
highPlatformDuration = Math.floor(Math.random() * 500) + 300;
}
+initializeGame();
// Handle game updates
game.update = function () {
player.update();
+ if (player.x !== 2048 / 4.5) {
+ player.x = 2048 / 4.5;
+ }
// Spawn platforms
platformSpawnCounter++;
if (platformSpawnCounter >= platformSpawnInterval) {
var platform = new Platform();
- platform.x = 2048 + 50; // Start just off-screen to the right
+ // Calculate x position based on the last platform's position
+ // Platform width is 1000, so place new platform at the end of the previous one
+ platform.x = lastPlatformX > 0 ? lastPlatformX + 1000 : 2048 + 50;
// Determine platform height based on current mode
if (isHighPlatformMode) {
platform.y = currentPlatformHeight - 600; // Higher platform
} else {
@@ -205,10 +261,10 @@
// Store last platform position for spacing
lastPlatformX = platform.x;
platforms.push(platform);
game.addChild(platform);
- // Randomize the spawn interval for the next platform
- platformSpawnInterval = Math.floor(Math.random() * 50) + 40;
+ // Set a fixed interval since we're connecting platforms
+ platformSpawnInterval = 50; // Adjust based on speed and platform width
platformSpawnCounter = 0;
}
// Update platforms
for (var i = platforms.length - 1; i >= 0; i--) {
@@ -218,21 +274,42 @@
platforms.splice(i, 1);
}
}
// Handle high platform mode timing
+ // Handle high platform mode timing
highPlatformTimer++;
if (highPlatformTimer >= highPlatformDuration) {
- // Toggle high platform mode
- isHighPlatformMode = !isHighPlatformMode;
+ // Don't immediately toggle - create transition
if (isHighPlatformMode) {
+ // Set the new lower platform height (returning to ground)
+ currentPlatformHeight = 2732 / 1.5;
+ highPlatformDuration = Math.floor(Math.random() * 500) + 300;
+ // Create a downward stair of platforms
+ var transitionPlatforms = 3; // Number of steps
+ for (var i = 0; i < transitionPlatforms; i++) {
+ var platform = new Platform();
+ platform.x = lastPlatformX + (i + 1) * 1000;
+ platform.y = 2732 / 1.5 - 600 + (i + 1) * (600 / transitionPlatforms);
+ platforms.push(platform);
+ game.addChild(platform);
+ lastPlatformX = platform.x;
+ }
+ } else {
// Set the new higher platform height
currentPlatformHeight = 2732 / 1.5 - 600;
highPlatformDuration = Math.floor(Math.random() * 300) + 200;
- } else {
- // Return to regular height
- currentPlatformHeight = 2732 / 1.5;
- highPlatformDuration = Math.floor(Math.random() * 500) + 300;
+ // Create an upward stair of platforms
+ var transitionPlatforms = 3; // Number of steps
+ for (var i = 0; i < transitionPlatforms; i++) {
+ var platform = new Platform();
+ platform.x = lastPlatformX + (i + 1) * 1000;
+ platform.y = 2732 / 1.5 - (i + 1) * (600 / transitionPlatforms);
+ platforms.push(platform);
+ game.addChild(platform);
+ lastPlatformX = platform.x;
+ }
}
+ isHighPlatformMode = !isHighPlatformMode;
highPlatformTimer = 0;
}
// Enemy handling (keep your existing enemy code)
//enemySpawnCounter++;
2D Single Monster. In-Game asset. 2d. Blank background. High contrast. No shadows..
A gold coin. 8 bit pixel art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Dark and moody dungeon background. Infinite repeatable texture. 8 bit pixel art.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A ruby. Pixel art.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A wooden arrow with white feathers and a steel arrow head. Horizontal. Pixel art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
backgroundmusic1
Music
playerjump
Sound effect
swordslash
Sound effect
jarbreak
Sound effect
enemyhit
Sound effect
eyeballhit
Sound effect
coincollect
Sound effect
woodbreak
Sound effect
coinbounce
Sound effect
potion
Sound effect
playerouch
Sound effect
bowfiring
Sound effect
arrowfire
Sound effect
arrowpickup
Sound effect
gameover
Sound effect