Platformer 2
by Raul Bojalil
HTML
<div id="debug">Debug</div>
<canvas width="600" height="1000"></canvas>
JavaScript
var LEVEL_ITEM_OBSTACLE = 0;
var LEVEL_ITEM_POWERUP = 1;
//Html elements
var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');
var $debug = document.getElementById("debug");
//Constants
var initialJumpAcceleration = -15;
var jumpHeldAcceleration = -0.7;
var groundY = 220;
var gravity = 0.09;
var movementSpeed = 0.2;
var maxGravityAcceleration = 15;
var levelScrollPointR = 370;
var levelScrollPointL = 100;
var levelScrollSpeed = 1;
var levelWidth = 600;
var maxJumps = 2;
//State
var player = {
x: 0, y: 0, w: 10, h: 30, jumps: 0, powerups: 0, isMovingLeft: false, isMovingRight: true,
isJumping: false, wantsToJump: false, isFalling: false, isJumpHeld: false, gravityAcceleration: 0,
rotationTimer: 0,
};
var level= {
scrollX: 0,
items: buildLevelItems()
};
//Event handlers
var onKeyDown = (e) => {
if (e.keyCode == 37) {
player.isMovingLeft = true;
}
if (e.keyCode == 32)
{
if (!player.isJumpHeld) {
player.wantsToJump = true;
}
player.isJumpHeld = true;
}
e.preventDefault();
return false;
}
var onKeyUp = (e) => {
if (e.keyCode == 37) {
player.isMovingLeft = false;
}
if (e.keyCode == 32) {
player.isJumpHeld = false;
player.wantsToJump = false;
}
e.preventDefault();
return false;
}
document.addEventListener('keydown', onKeyDown, false);
document.addEventListener('keyup', onKeyUp, false);
//Methods
function buildLevelItems() {
var items = [];
for(var i=1; i < 100; i++) {
items.push({ x: i * 200, y: groundY - 60, w: 80, h: 60, type: LEVEL_ITEM_OBSTACLE });
}
return items;
}
function jump() {
player.jumps ++;
gravityForce = 1;
player.gravityAcceleration = initialJumpAcceleration;
player.isJumping = true;
player.wantsToJump = false;
}
function stopJumping() {
player.isJumping = false;
player.gravityAcceleration = 0;
player.jumps = 0;
}
function pickPowerUp() {
player.powerups ++;
}
function handlePlayerLevelCollisions(player) {
for (var i=0; i...