0
node.js + socket.io를 사용하여 승수 HTML5 캔버스 게임을 만들려고합니다. 불행히도 모든 플레이어를 그릴 때마다 모든 이미지가 서로 겹쳐집니다.Javascript가 서로의 위에 이미지를 그립니다.
socket.on('drawPlayers', function(players){
context.clearRect (0 , 0 , gameWidth , gameHeight); //clear canvas
for(var i=0; i<players.length; i++){
var cur = players[i];
var playerSprite = new Image();
playerSprite.onload = function() {
return context.drawImage(playerSprite, cur.x, cur.y);
};
playerSprite.src = 'images/sprite.png';
console.log("drawing player "+cur.un+" at ("+cur.x+","+cur.y+")");
}
});
console.log()는 다른 x 및 y 값을 올바르게 기록하지만 모든 이미지는 서로 위에 쌓입니다.
function player(id,username){
this.id = id;
this.un = username;
this.y = Math.floor(Math.random() * 501);
this.x = Math.floor(Math.random() * 801);
this.src = 'images/mobile_md_logo.png';
}
I
이 playerSprite.onload ='내부 디버깅을 넣어보십시오 루프 내부에서 호출 :
사용이 루프에 하나
cur
의 범위를 분리하는 function() {'? – Isaac관련 : http://stackoverflow.com/q/1451009. 선언의 배치에도 불구하고,'cur'와'playerSprite'는 한번만 선언되고 루프의 모든 반복에 의해 공유됩니다. [당신은 클로저를 원할 것입니다.] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures#Creating_closures_in_loops.3A_A_common_mistake) 각각의 반복문에는 'cur'과'playerSprite'가 있습니다. . –