Talking about Game development, HTML5, Javascript and Phaser.
Do you already know Phaser?
As said in the official site, it’s a fast, free and fun open source game framework for making desktop and mobile browser HTML5 games providing fast 2D Canvas and WebGL rendering.
In other words, it’s absolutely something I want to put my hands on, and which I recommend you.
In only a few minutes I was able to import a level made with Tiled and make it run with a basic platform engine.
Look what we have:
Use LEFT and RIGHTS arrow keys to move, UP to jump. Fast and easy.
And this is the fully commented source code, not more than 40 lines of code I fully commented for you:
<!doctype html> <html> <head> <script src="phaser.min.js"></script> <style> body{margin:0} </style> <script type="text/javascript"> window.onload = function() { // here we define a new 640x480 game, with three core functions: // onPreload to be executed when the game preloads // onCreate to be executed once the game is firstly created // onUpdate to be called every time the game us updated var game = new Phaser.Game(640,480,Phaser.AUTO,"",{preload:onPreload, create:onCreate, update:onUpdate}); // some other variables, we'll se later their meaning and how to use them var map; var tileset; var layer; var player; var cursors; // THE GAME IS PRELOADING function onPreload() { // importing "level.json" file to load the level into "level" instance. // this is the file I created and exported with Tiled game.load.tilemap("level", "level.json", null, Phaser.Tilemap.TILED_JSON); // these are the tiles used in the levels, I am loading "tiles.png" file and I also // need to specify tile size (32x32) and the instance ("level"). // I found tiles file must have at least two tiles horizontally and vertically, // or collisions won't work game.load.tileset("tiles", "tiles.png", 32, 32); // the hero of the game is loaded as an image, here is how I load hero.png and // assign it to "hero" instance game.load.image("hero", "hero.png"); } // THE GAME HAS BEEN CREATED function onCreate() { // adding the "level" tilemap created at line 27 to the game map = game.add.tilemap("level"); // adding the "tiles" tileset created at line 30 to the game tileset = game.add.tileset("tiles"); // this is the way we tell the script every tile in our engine needs to be checked // for collision. This way all tiles are solid tileset.setCollisionRange(0, tileset.total-1, true, true, true, true); // now we need to create a game layer, and assign it a tile set and a map layer = game.add.tilemapLayer(0, 0, 640, 480, tileset, map, 0); // finally we create the player placing "hero" instance at x=32, y=416 player = game.add.sprite(32, 416, "hero"); // this is the gravity applied to the player player.body.gravity.y = 8; // the fastest way to create game controls is "createCursorKeys" method // which automatically assigns up, down, left and right movement to // arrow keys cursors = game.input.keyboard.createCursorKeys(); } // THE GAME IS GOING TO BE UPDATED function onUpdate() { // we are looking for collisions between the hero and the tiles game.physics.collide(player, layer); // setting player horizontal velocity to zero player.body.velocity.x = 0; // are we moving left? if (cursors.left.isDown){ player.body.velocity.x = -150; } // are we moving right? if (cursors.right.isDown){ player.body.velocity.x = 150; } // are we jumping? if (cursors.up.isDown && player.body.touching.down){ player.body.velocity.y = -250; } } }; </script> </head> <body> </body> </html>
And obviously Phaser is not intended just to build platform games, as it features physics, particles, advanced camera management and a lot of other features I suggest you to try.
Download the source code with all required libraries.
Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.