I am just trying to make a simple 2D racing game using canvas. It uses the <kbd>W</kbd>,<kbd>S</kbd>,<kbd>A</kbd>, <kbd>D</kbd> keys to move the car.  The <kbd>W</kbd> key should take me forward and the <kbd>A</kbd> and <kbd>D</kbd> keys will turn each way. I want the car to continue heading forward after being turned.  I am currently just multiplying the distance to move by the sin or cosine of the angle in order to find the x and y positions, but it is not reacting how I would expect. Thanks.  

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-html -->

    <!DOCTYPE html>
    <head>
      <meta charset="UTF-8" />
      <title></title>
    </head>
    <body>
    <canvas id="canvas_layer_01" width="3072" height="2048" style="border:1px solid #000000;">></canvas>

    <script>
      var canvas = document.getElementById("canvas_layer_01");
      ctx = canvas.getContext("2d");

      car_image = new Image();
      car_image.src = 'http://i.imgur.com/Bl2p5KI.png';

      var key_pressed_a = false,
        key_pressed_d = false,
        key_pressed_w = false,
        key_pressed_s = false;

      var player_x = 50,
        player_y = 50,
        player_speed = 10,
        player_angle = 0,
        max_turn_angle = 10; // probably needs to change based on speed

      document.addEventListener("keydown", function(e){
        switch(e.keyCode){
          case 87:
            key_pressed_w = true;
            break;

          case 83:
            key_pressed_s = true;
            break;

          case 65:
            key_pressed_a = true;
            break;

          case 68:
            key_pressed_d = true;
            break;
        }
      }, false);

      document.addEventListener("keyup", function(e) {
        switch(e.keyCode) {
          case 87:
            key_pressed_w = false;
            break;

          case 83:
            key_pressed_s =false;
            break;

          case 65:
            key_pressed_a = false;
            break;

          case 68:
            key_pressed_d =false;
            break;
        }
      }, false);

      window.requestAnimFrame = (function(callback) {
        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
          function(callback) {
            window.setTimeout(callback, 1000/60);
          };
      })();

      // http://stackoverflow.com/a/16546061/6716639
      function render_image(img, x, y, width, height, degrees) {

        //Convert degrees to radian
        var rad = degrees * Math.PI / 180;

        //Set the origin to the center of the image
        ctx.translate(x + width / 2, y + height / 2);

        //Rotate the canvas around the origin
        ctx.rotate(rad);

        //draw the image
        ctx.drawImage(img,width / 2 * (-1),height / 2 * (-1),width,height);

        //reset the canvas
        ctx.rotate(rad * ( -1 ) );
        ctx.translate((x + width / 2) * (-1), (y + height / 2) * (-1));
      }

      function updateGame() {

        if(key_pressed_w) {
          player_x += player_speed * Math.sin(player_angle);
          player_y += player_speed * Math.cos(player_angle);
        }
        else if(key_pressed_s) {
          player_y += player_speed;
        }
        else if(key_pressed_a) {
          player_angle -= max_turn_angle;
        }
        else if(key_pressed_d) {
          player_angle += max_turn_angle;
        }

        ctx.clearRect(0, 0, canvas.width, canvas.height);

        render_image(car_image, player_x, player_y, car_image.width, car_image.height, player_angle);

        requestAnimFrame(function() {
          updateGame();
        });
      }

      updateGame();

    </script>

    </body>
    </html>


<!-- end snippet -->