1

我是 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);

(我每 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});

(这会在开始时制作每个玩家的图表,并且效果很好)

   socket.on('new_data', function(players){
            for (i in players){
                players[i].graph = players[i].graph.attr({cx : players[i].x , cy:players[i].y});


}

我的问题是这里它说这没有方法ATTR。好像 object.graph 实际上并不是我想要的那样。我希望我已经把自己说得够清楚了。如果没有,请告诉我。

非常感谢。

4

1 回答 1

0

你的问题有点不清楚,但我认为你正试图通过 socket.io 传递整个 raphael 对象?

socket.on('new_data', function(players){
   // here players is just a plain object without any methods
}

只需在您的浏览器中创建一个 console.log(players),您就会看到发生了什么。几行代码我希望这会给你一个想法。

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

您还必须确保每个玩家都获得他的玩家数据,因此如果来自 playerdata 的 id 相同,则为每个玩家提供唯一的 id,则更新玩家位置。

于 2012-09-27T13:37:23.483 回答