我是Node JS和Socket.IO的新手,而且几乎是JS的新手......我正在尝试制作迷你多人游戏。我对服务器中玩家的位置进行了所有处理,然后将所有位置传递给每个客户端,以便每个位置在浏览器中生成所有图形。
在服务器端,我有这些:
function Player(x,y){
some things...
this.graph = '';
}
setInterval(function(){
for (i in players){
players_position(players[i]);
}
io.sockets.emit('new_data', players);
}, 100);
function Player(x,y){
some things...
this.graph = '';
}
setInterval(function(){
for (i in players){
players_position(players[i]);
}
io.sockets.emit('new_data', players);
}, 100);
(用这个我每100毫秒发送所有球员位置)
然后在客户端:
(这会在开头创建每个玩家的图表并且工作正常)var r = Raphael('field', 800, 600)
for (i in players){
players[i].graph = r.circle(players[i].x,players[i].y).attr({fill:'blue'});
players[i].graph = players[i].graph.attr({cx : players[i].x , cy:players[i].y});
var r = Raphael('field', 800, 600)
for (i in players){
players[i].graph = r.circle(players[i].x,players[i].y).attr({fill:'blue'});
players[i].graph = players[i].graph.attr({cx : players[i].x , cy:players[i].y});
我的问题是,它在这里说没有方法ATTR。好像object.graph实际上不是我想要的那样。
我希望我已经足够清楚了。如果没有,请告诉我。
非常感谢。
答案 0 :(得分:0)
你的问题有点不清楚,但我认为你试图通过socket.io传递整个raphael对象?
socket.on('new_data', function(players){
// here players is just a plain object without any methods
}
只需在浏览器中创建一个console.log(播放器),您就会看到最新情况。 几行代码我希望这会给你一个想法。
var local_players = [] // < store your clientside players and the raphael objects
socket.on('new_data', function(playerdata){
//for every player data recieved update your local players data..
for(var i in playerdata)
local_players[i].attr({cx : playerdata[i].x , playerdata[i].y});
}
你还必须确保每个玩家获得他的玩家数据,所以给每个玩家一个唯一的id,如果来自玩家数据的id是相同的更新玩家位置。