2016-06-21 3 views
0

멀티 플레이어 게임을 만들고 있는데 자바 스크립트에 여러 가지 키와 값이있는 개체가 있습니다.업데이트에서 개체를 수정하고 이전 키를 제거하는 방법?

이 개체는 게임 서버에 연결된 각 플레이어에 대한 정보를 보유하기 위해 플레이어라고합니다.

name

는 오브젝트의 핵심이며, 그 객체의 값

끊임없이 I는 서버에 요청을 보내고 같은 정보 x, y, level를 보유 Player 오브젝트 등이다 선수에 대한 최신 정보를 얻으십시오. 이것은 매우 자주 발생하기 때문에

, 나는 players 개체마다 (players = {})을 재설정되고 싶지 않아, 그래서 대신에, 나는 어떤 새로운 정보로 개체를 업데이트하고 있습니다. 순간

나는 if name in players을 확인하고, 만약 그렇다면,이 같은 객체 업데이트 : 정보와 함께,

players[name].x = x; 
players[name].y = y; 
// etc. 

그렇지 않으면, 단순히 새로운 Player 객체를 생성을하고 players 객체에 추가 . (예를 들어 새로운 플레이어가 연결된 경우)

players에 이미있는 플레이어가 더 이상 서버의 업데이트 된 정보에없는 경우 (즉, 플레이어의 연결이 끊어진 경우), 문제를 해결하려면 어떻게해야합니까? 그 물체.

더듬이 루프가 필요하며 플레이어가 더 이상 업데이트 된 정보에 없다면 객체에서 제거하거나 더 간단한 방법이 있습니까?

다른 방법이 없다면 사전을 재설정하고 데이터를 추가하는 것이 더 나은 방법일까요? 이런 단순한 일을하는 것이 최선의 방법이 아니라고 느낍니다.

여기에 지금까지 내 코드입니다 :

var newplayers = new info from server; 

for(var i=0; i<newplayers.length; i++) 
{ 
    var pl = newplayers[i]; 

    var name = pl.name; 

    var x = pl.x; 
    var y = pl.y; 
    // etc. 

    if(name in players) 
    { 
     players[name].x = x; 
     players[name].y = y; 
     // etc. 
    } else 
     newplayer = new Player(); 
     newplayer.x = x; 
     newplayer.y = y; 
     // etc. 
     players[name] = newplayer; 
    } 
} 

// What if the player is no longer in the updated info, but still in players? 

모든 도움 감사합니다! 미리 감사드립니다!

+0

사전은 JavaScript에서 개체라고합니다. – JJJ

+0

알려 주셔서 감사합니다. 네가 두 이름을 모두 사용할 수 있다고 생각 했어. 나는 그 질문을 갱신 할 것이다. –

+0

새로운 플레이어로 오래된 플레이어 정보를 업데이트하고 새로운 플레이어를 오래된 플레이어에 추가하면 간단히'players = newplayers'를 설정할 수 있습니다 for 루프가 필요하지 않습니다. –

답변

1

players 사전에서 오래된 데이터를 제거하거나 매번 처음부터 다시 작성할 수 있습니까?

나는 데이터가 얼마나 많은가에 따라 대답이 달라진다 고 생각한다. 최대 20 명의 플레이어가있는 경우에는별로 중요하지 않습니다. 1 백만 명의 플레이어가 있다면 그것은 다릅니다.

확실하게 알고 싶다면 측정하는 것이 가장 좋습니다. 가장 많은 수의 플레이어가 처리 할 수있는 두 가지 솔루션을 모두 시험해보고 성능에 미치는 영향을 확인하십시오.

또는 가장 간단한 구현으로 이동하고 목적에 부합하는지 확인하십시오. 필요 전에 최적화 할 필요가 없습니다.

개인적으로 나는 구형 데이터를 제거하기 위해 players을 반복합니다. 성능이 충분하지 않다면 최적화 할 것입니다.

+0

조언 주셔서 감사합니다! 한 번에 최대 100 명의 플레이어가있을 수 있지만 아마 괜찮을 것입니다. –

관련 문제