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...