【发布时间】:2013-06-03 01:32:12
【问题描述】:
我正在使用 node.js + socket.io 来尝试制作一个乘数 HTML5 画布游戏。不幸的是,每次我去画所有的球员时,所有的图像最终都会相互重叠。
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';
}
我
【问题讨论】:
-
尝试在
playerSprite.onload = function() {中进行一些调试? -
相关:stackoverflow.com/q/1451009。尽管放置了声明,
cur和playerSprite只声明一次并由循环的所有迭代共享。 You'll want a closure 所以每次迭代都有自己的cur和playerSprite。
标签: javascript html node.js socket.io html5-canvas