HTML Canvas Key event handler
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ship turn with keys</title> </head>//w w w. ja v a 2s . c o m <body> <canvas id="canvas" width="200" height="200"> Your browser does not support the HTML 5 Canvas. </canvas> <script type="text/javascript"> var theCanvas = document.getElementById('canvas'); var context = theCanvas.getContext('2d'); var rotation = 0; var x = 50; var y = 50; var facingX = 0; var facingY = 0; var movingX = 0; var movingY = 0; var width = 20; var height = 20; var rotationalVelocity = 5; //how many degrees to turn the ship var thrustAcceleration = .03; var keyPressList = []; function drawScreen() { if (keyPressList[38] == true) { //thrust var angleInRadians = rotation * Math.PI / 180; facingX = Math.cos(angleInRadians); facingY = Math.sin(angleInRadians); movingX = movingX + thrustAcceleration * facingX; movingY = movingY + thrustAcceleration * facingY; } if (keyPressList[37] == true) { //rotate counter-clockwise rotation -= rotationalVelocity; } if (keyPressList[39] == true) { //rotate clockwise rotation += rotationalVelocity; ; } x = x + movingX; y = y + movingY; // draw background and text context.fillStyle = '#000000'; context.fillRect(0, 0, 200, 200); context.fillStyle = '#ffffff'; context.font = '20px sans-serif'; context.textBaseline = 'top'; context.fillText("Player Ship - key turn", 0, 180); //transformation var angleInRadians = rotation * Math.PI / 180; context.save(); //save current state in stack context.setTransform(1, 0, 0, 1, 0, 0); // reset to identity //translate the canvas origin to the center of the player context.translate(x + .5 * width, y + .5 * height); context.rotate(angleInRadians); //drawShip context.strokeStyle = '#ffffff'; context.beginPath(); //hard coding in locations //facing right context.moveTo(-10, -10); context.lineTo(10, 0); context.moveTo(10, 1); context.lineTo(-10, 10); context.lineTo(1, 1); context.moveTo(1, -1); context.lineTo(-10, -10); context.stroke(); context.closePath(); //restore context context.restore(); //pop old state on to screen } const FRAME_RATE = 40; var intervalTime = 1000 / FRAME_RATE; gameLoop(); function gameLoop() { drawScreen(); window.setTimeout(gameLoop, intervalTime); } document.onkeydown = function(e) { e = e ? e : window.event; keyPressList[e.keyCode] = true; } document.onkeyup = function(e) { e = e ? e : window.event; keyPressList[e.keyCode] = false; }; </script> </body> </html>