2013-08-24 98 views
5

我有一個畫面是重繪每25毫秒,並且圖像閃爍,這裏是我的代碼重繪帆布HTML5無閃爍

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

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

,這裏是renderMap()函數

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)}  
       } 

哪些變化我是否需要對代碼進行停止閃爍?

回答

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並工作正常! TY –