/****
* Classes
****/
var ControlButton = Container.expand(function (type) {
var self = Container.call(this);
self.buttonType = type;
self.isPressed = false;
var buttonGraphics;
if (type === 'jump') {
buttonGraphics = self.attachAsset('jumpButton', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
buttonGraphics = self.attachAsset(type === 'left' ? 'leftButton' : 'rightButton', {
anchorX: 0.5,
anchorY: 0.5
});
}
self.down = function (x, y, obj) {
self.isPressed = true;
buttonGraphics.alpha = 0.7;
};
self.up = function (x, y, obj) {
self.isPressed = false;
buttonGraphics.alpha = 1.0;
};
return self;
});
var Platform = Container.expand(function (width, height) {
var self = Container.call(this);
self.platformWidth = width || 300;
self.platformHeight = height || 40;
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: self.platformWidth / 300,
scaleY: self.platformHeight / 40
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 8;
self.jumpPower = 20;
self.gravity = 0.8;
self.onGround = false;
self.maxFallSpeed = 15;
self.moveLeft = function () {
self.velocityX = -self.speed;
};
self.moveRight = function () {
self.velocityX = self.speed;
};
self.jump = function () {
if (self.onGround) {
self.velocityY = -self.jumpPower;
self.onGround = false;
}
};
self.stopHorizontalMovement = function () {
self.velocityX = 0;
};
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
// Limit fall speed
if (self.velocityY > self.maxFallSpeed) {
self.velocityY = self.maxFallSpeed;
}
// Update position
self.x += self.velocityX;
self.y += self.velocityY;
// Keep player within screen bounds horizontally
if (self.x < 60) {
self.x = 60;
}
if (self.x > 1988) {
self.x = 1988;
}
// Reset onGround flag
self.onGround = false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 1024;
player.y = 2500;
var platforms = [];
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 1.0
}));
ground.x = 1024;
ground.y = 2732;
// Create platforms
var platformData = [{
x: 400,
y: 2400,
width: 200
}, {
x: 800,
y: 2200,
width: 250
}, {
x: 1200,
y: 2000,
width: 200
}, {
x: 600,
y: 1800,
width: 300
}, {
x: 1400,
y: 1600,
width: 200
}, {
x: 300,
y: 1400,
width: 250
}, {
x: 1000,
y: 1200,
width: 300
}, {
x: 1600,
y: 1000,
width: 200
}];
for (var i = 0; i < platformData.length; i++) {
var platformInfo = platformData[i];
var platform = game.addChild(new Platform(platformInfo.width));
platform.x = platformInfo.x;
platform.y = platformInfo.y;
platforms.push(platform);
}
// Control buttons
var leftButton = LK.gui.bottomLeft.addChild(new ControlButton('left'));
leftButton.x = 80;
leftButton.y = -80;
var rightButton = LK.gui.bottomLeft.addChild(new ControlButton('right'));
rightButton.x = 220;
rightButton.y = -80;
var jumpButton = LK.gui.bottomRight.addChild(new ControlButton('jump'));
jumpButton.x = -80;
jumpButton.y = -80;
// Control button labels
var leftLabel = new Text2('←', {
size: 60,
fill: 0xFFFFFF
});
leftLabel.anchor.set(0.5, 0.5);
leftButton.addChild(leftLabel);
var rightLabel = new Text2('→', {
size: 60,
fill: 0xFFFFFF
});
rightLabel.anchor.set(0.5, 0.5);
rightButton.addChild(rightLabel);
var jumpLabel = new Text2('↑', {
size: 60,
fill: 0xFFFFFF
});
jumpLabel.anchor.set(0.5, 0.5);
jumpButton.addChild(jumpLabel);
function checkCollisions() {
var playerBottom = player.y;
var playerTop = player.y - 120;
var playerLeft = player.x - 60;
var playerRight = player.x + 60;
// Check ground collision
if (playerBottom >= ground.y - 50) {
if (player.velocityY > 0) {
player.y = ground.y - 50;
player.velocityY = 0;
player.onGround = true;
}
}
// Check platform collisions
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
var platformLeft = platform.x - platform.platformWidth / 2;
var platformRight = platform.x + platform.platformWidth / 2;
var platformTop = platform.y - platform.platformHeight / 2;
var platformBottom = platform.y + platform.platformHeight / 2;
// Check if player is horizontally aligned with platform
if (playerRight > platformLeft && playerLeft < platformRight) {
// Check if player is falling onto platform from above
if (player.velocityY > 0 && playerBottom >= platformTop && playerTop < platformTop) {
player.y = platformTop;
player.velocityY = 0;
player.onGround = true;
}
}
}
}
game.update = function () {
// Handle input
if (leftButton.isPressed) {
player.moveLeft();
} else if (rightButton.isPressed) {
player.moveRight();
} else {
player.stopHorizontalMovement();
}
if (jumpButton.isPressed) {
player.jump();
}
// Check collisions
checkCollisions();
// Check if player fell off screen
if (player.y > 2800) {
// Reset player position
player.x = 1024;
player.y = 2500;
player.velocityX = 0;
player.velocityY = 0;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -77,13 +77,13 @@
// Update position
self.x += self.velocityX;
self.y += self.velocityY;
// Keep player within screen bounds horizontally
- if (self.x < 40) {
- self.x = 40;
+ if (self.x < 60) {
+ self.x = 60;
}
- if (self.x > 2008) {
- self.x = 2008;
+ if (self.x > 1988) {
+ self.x = 1988;
}
// Reset onGround flag
self.onGround = false;
};
@@ -181,11 +181,11 @@
jumpLabel.anchor.set(0.5, 0.5);
jumpButton.addChild(jumpLabel);
function checkCollisions() {
var playerBottom = player.y;
- var playerTop = player.y - 80;
- var playerLeft = player.x - 40;
- var playerRight = player.x + 40;
+ var playerTop = player.y - 120;
+ var playerLeft = player.x - 60;
+ var playerRight = player.x + 60;
// Check ground collision
if (playerBottom >= ground.y - 50) {
if (player.velocityY > 0) {
player.y = ground.y - 50;
Poder de saltó. In-Game asset. 2d. High contrast. No shadows
Slow fall. In-Game asset. 2d. High contrast. No shadows
Paracaídas. In-Game asset. 2d. High contrast. No shadows
Flecha hacia la derecha. In-Game asset. 2d. High contrast. No shadows
Botas de super salto. In-Game asset. 2d. High contrast. No shadows
Cubo de slime con cara feliz. In-Game asset. 2d. High contrast. No shadows