2014-04-19 105 views
0

我正在嘗試使用畫布和帶有透明背景的PNG文件製作賽車遊戲。使用png文件的畫布動畫

我按住其中一個箭頭時出現問題。在運動的相反方面,它看起來像一個白色陰影,汽車的舊位置。

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 

      var canvas; 
      var ctx; 
      var car = new Image(); 
      var x = 0; 
      var y = 0; 


      function startUp(){ 
       canvas = document.getElementById('myCanvas'); 
       ctx = canvas.getContext('2d'); 

       loadImages(); 
       startGameLoop(); 
      } 


      function startGameLoop() { 

       setInterval(function() { 
        drawScreen(); 
        drawCar(); 
       }, 16); 
       window.addEventListener('keydown', whatKey, true); 

      } 

      function drawScreen(){ 

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

       ctx.fillStyle = '#aaaaaa'; 
       ctx.rect(0, 0, canvas.width, canvas.height); 
       ctx.fill(); 
      } 

      function drawCar(){ 

       ctx.drawImage(car, x ,y, 200, 103); 
      } 

      function whatKey(evt) { 

       switch (evt.keyCode) { 

        // Left arrow. 
        case 37: { 
         x -= 15; 
        } 
         break; 

        // Right arrow. 
        case 39:{ 
         x += 15; 
        } 
         break; 

        // Down arrow 
        case 40:{ 
         y += 15; 
        } 
         break; 

        // Up arrow 
        case 38: { 
         y -= 15; 
        } 
         break; 
       } 

      } 

      function loadImages() { 
       car.src = 'http://sammywasem.com/images/f3-top.png'; 
      } 
     </script> 
    </head> 

    <body onload="startUp()"> 
     <canvas id="myCanvas" width="1050" height="620"> 
     </canvas> 
    </body> 
</html> 

回答

0

汽車的舉動實際上是正確的方式。
假設你按下了正確的鍵:事件被髮送到窗口,並被你的代碼困住:汽車向右轉。但是這個事件也由整個窗口處理,它被理解爲:將窗口向右移動。
所以你最終看到的是,由於窗戶移動的不僅僅是汽車,而是汽車的左邊。

你需要做的是防止關鍵事件的進一步冒泡一旦你處理它:它與

event.preventDefault(); 

event.stopPropagation(); 

mdn做看preventDefault規格或stopPropagation

我已經做了搗鼓出來的代碼,並更新它:

http://jsbin.com/joboxuvu/1/edit?js,output

+0

謝謝您的回答,那是我的問題之一。我試了我的原始代碼,上面貼出的代碼,在我的leptop上,它工作正常。 – user3549461

+0

不客氣。你的意思是還有一個問題呢?我無法看到您在Chrome或Firefox(Mac OS)中描述的白色陰影。 – GameAlchemist

+0

問題出在我的電腦上,我想你看不到它。當我按住其中一個箭頭時,每次循環執行時,屏幕都會被清除,汽車被吸引到新的x或y上,汽車的白色陰影將被繪製在舊的x或y上。它發生在所有重要的瀏覽器中。我不知道,它是從我的視頻卡設置? – user3549461