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 に渡そうとしていると思いますか?

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

また、すべてのプレーヤーが自分のプレーヤー データを取得するようにする必要があるため、すべてのプレーヤーに一意の ID を与えます。プレーヤー データの ID が同じ場合は、プレーヤーの位置を更新します。

于 2012-09-27T13:37:23.483 に答える