2013-08-24 15 views
5

点滅せずにキャンバスHTML5を再描画し、画像がちらつくされ、ここで、ここでrenderMap()関数私はすべての25msの再描画され、画面をしました

function renderMap(){ 
        var startX = playerX - (screenW/2); 
        var startY = playerY - (screenH/2); 

        maxX = playerX + (screenW/2); 
        maxY = playerY + (screenH/2); 
        $.getJSON('mapa3.json', function(json){ 
         for (x = startX; x < maxX; x=x+32){ 
          for (y = startY; y < maxY; y=y+32){ 
           intTile = json.layers[0].data[((y/32)* 100) + (x/32)]; 
           context.putImageData(getTile(intTile - 1), x - startX, y - startY); 
          } 
         } 
        }); 

        var imgCharacter = new Image(); 
        imgCharacter.src = 'char.png'; 

        var posX = (screenW - imgCharacter.width)/2; 
        var posY = (screenH - imgCharacter.height)/2; 
        imgCharacter.onload = function(){context.drawImage(imgCharacter, posX, posY)}  
       } 

どのような変更がされて私のコード

   var FRAME_RATE = 40; 
       var intervalTime = 1000/FRAME_RATE; 
       gameLoop(); 

       function gameLoop(){ 
        context.clearRect(0, 0, 640, 640); 
        renderMap(); 
        window.setTimeout(gameLoop, intervalTime); 
       } 

で、ちらつきを止めるためにコードを作成する必要はありますか?

答えて

3

私はそれが各反復のイメージを読み込んでいると思います。 var imgCharacter...を入れてみてください、renderMapの外に次の行、および画像のonload機能は、それは一度だけ

var imgCharacter = new Image();  
imgCharacter.onload = function() { 
    renderMap(); 
} 
imgCharacter.src = 'char.png'; 

function renderMap() { 
    var startX = playerX - (screenW/2); 
    var startY = playerY - (screenH/2); 

    maxX = playerX + (screenW/2); 
    maxY = playerY + (screenH/2); 
    $.getJSON('mapa3.json', function (json) { 
     for (x = startX; x < maxX; x = x + 32) { 
      for (y = startY; y < maxY; y = y + 32) { 
       intTile = json.layers[0].data[((y/32) * 100) + (x/32)]; 
       context.putImageData(getTile(intTile - 1), x - startX, y - startY); 
      } 
     } 
    }); 

    var posX = (screenW - imgCharacter.width)/2; 
    var posY = (screenH - imgCharacter.height)/2; 

    context.drawImage(imgCharacter, posX, posY) 
} 

を走っている私はonload機能を知らせるためマルケに感謝も私が見落とし、renderMap外に行く必要それは初めてです

+0

clearRectが呼び出されると画面がちらつき、文字が消えます。/ –

+0

コメントを更新できますか? –

+0

の画面がまだちらつき、clearRectが呼び出されたときに文字が消えてしまいます。:/ –

1

すべてのイメージと他のデータを描画してアレイ内に格納する前にロードしてください。
より良い使用requestAnimationFrame
JSON(またはその他のデータ)を取得するのには時間がかかることに注意してください。

+0

私はrequestAnimationFrameを使用して正常に働いた!タイ –

関連する問題