Node.JS的实时图形

时间:2012-09-27 03:16:05

标签: javascript node.js graphics raphael socket.io

我是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实际上不是我想要的那样。 我希望我已经足够清楚了。如果没有,请告诉我。

非常感谢。

1 个答案:

答案 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是相同的更新玩家位置。