最初に、私の英語で申し訳ありません:(
キャンバス要素を楽しんでいて、ゲームブラウザを作ろうとしていますが、この問題を解決できません。
マップ タイルを 2 次元配列で取得します。
位置プレーヤーを取得し、コンテキストを変換して (キャンバスの中央に描画する)、マップ内の絶対位置を考慮してマップを再描画します。しかし、プレーヤーを移動すると、マップが約 1 秒 (clearRect キャンバスだと思います) 表示された後にマップが消えます。
だから、私の問題は、キャンバスが黒のこの厄介な秒です。
コード。
function pinta(){
var mirror = renderToCanvas(canvas.width, canvas.height, function (ctx) {
ctx.clearRect(0,0,canvas.width,canvas.height);
//antes de pintar debemos calcular la traslacion
////////////////////////////////////////////////
var moverX=canvas.width/2-players[yo].x;
var moverY=canvas.height/2-players[yo].y;
ctx.translate(moverX,moverY);
pinta_terreno();
pinta_players();
function pinta_players()
{
for( var player in players ) {
var i=player,
x=players[i].x;
y=players[i].y;
var img=new Image(25,25);
if(i==2)img.src="/img/player2.png";
else img.src="/img/player1.png";
ctx.drawImage(img,x,y);
}
}
function pinta_terreno()
{
// donde estoy en tiles
var min_x=(-canvas.width+players[yo].x)/TAM_TILE;
var max_x=(canvas.width+players[yo].x)/TAM_TILE;
var min_y=(-canvas.width+players[yo].y)/TAM_TILE;
var max_y=(canvas.width+players[yo].y)/TAM_TILE;
///////////////////////
for(var i=min_x;i<=max_x;i++)
for(var j=min_y;j<=max_x;j++)
{
var x=i*TAM_TILE;
var y=j*TAM_TILE;
try
{
if(mapa[i][j]!=null && mapa[i][j]!="undefined")
{
var terreno=new Image(25,25);
terreno.src="/img/terrain/"+mapa[i][j]+".png";
ctx.drawImage(terreno,x,y);
}
}catch(e)
{
}
} // del for(var j=0;j<(canvas.height/TAM_TILE);j++)
} // del pintaterreno
});
context.clearRect(0,0,canvas.width,canvas.height);
context.drawImage(mirror, 0, 0);
}