2012-09-27 3 views
0

저는 Node JS와 Socket.IO에 익숙하지 않고 거의 JS에 익숙하지 않습니다 ... 나는 배우기 위해 미니 멀티 플레이어 게임을 만들기 위해 노력하고 있습니다. 나는 서버에서 플레이어의 위치를 ​​모두 처리하고 각 클라이언트가 브라우저에서 모든 그래프를 만들도록 모든 위치를 전달합니다. 서버 측에서 Node.JS가 포함 된 실시간 그래픽

나는이 있습니다

클라이언트 측에서 다음

(나는 모든 선수 위치마다 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); 

:

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가 실제로 내가 원하는 것이 아닌 것처럼 말입니다. 나는 내가 충분히 자신을 분명히하기를 희망한다. 그렇지 않다면 말해주십시오.

대단히 감사합니다.

+0

'플레이어'는 클라이언트 측 코드의 첫 번째 부분에서 어디서 왔습니까? 소켓 이벤트가 생기면 브라우저 디버거에서 '플레이어'는 어떻게 생겼을까요? – ebohlman

+0

@ebohlman 나는 객체 플레이어 [i] .graph와 함께 console.log를 사용하는데 attrs가있는 객체입니다 ... 그래서 왜 메소드 attr이 없는지 이해할 수 없습니다. – andresmechali

답변

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

당신은 또한 playerdata에서 ID가 동일한 업데이트가 플레이어의 위치 인 경우, 모든 플레이어가 자신의 선수 데이터를 얻을 수 있는지 확인하십시오, 그래서 모든 플레이어에게 고유 ID를 제공해야합니다.

관련 문제