2012-01-20 2 views
2

시간 동안 이벤트를 어떻게 고려해야합니까? 대부분의 게임은 프레임을 사용하며 시뮬레이션은 시간 단위로 수행됩니다. 특정 시간이 필요한 이벤트가 발생하면 어떻게해야합니까?프레임 속도와 무관 한 시간 기반 시뮬레이션

예를 들어, DOTA와 같은 게임에서 공격 속도는 매우 중요합니다. 이제이 게임의 시간 단계가 50ms라고 가정 해 봅시다. 두 영웅이 싸우고 있습니다. HeroA는 HeroB를 공격하고 14ms에 "죽이는 타격"을합니다. HeroB는 HeroA를 공격하고 또한 땅을 "죽이는 타격"으로 만듭니다. 이것은 단지 40ms의 시간 간격으로 발생합니다. 그러나 이러한 타격 중 어느 것도 50ms 시간 단계까지 시뮬레이션되지 않습니다. 따라서 50ms가 지났을 때 HeroA 만 남겨 두어야 만 영웅 두 명이 죽을 것입니다. 왜냐하면 그는 먼저 공격 할 수 있었기 때문입니다.

이 문제를 해결할 방법이 있습니까?

+0

예측. 피어 투 피어 게임은 일반적으로 두 결과를 모두 취하여 더 정확한 결과를 내기 위해 최선을 다할 것입니다. 50ms짜리 타임 스텝 (게임에 대해 엄청난 것)조차도 대기 시간보다 짧을 수 있다는 것을 알아야합니다. 전용 서버는 누구도 호스트가 될 수있는 이점이 없기 때문에 한 사람이 대기 시간이 더 길어서 서버를 수신 한 것보다 실제로 발생한 이벤트를 결정할 때 고려해야 할 대기 시간이 더 많을 수 있기 때문에 전용 서버가 더 좋을 수 있습니다 먼저. 다른 스레드에서 예측 코드를 실행하면 도움이 될 수 있습니다. –

+0

서로 다른 네트워크 토폴로지가 어떻게 작동하는지 이해하고 있으므로 귀하가 말하는 것에 대해 더 많은 것을 자유롭게 확장하십시오. 그러나 기본적으로는 원래의 질문에 대한 범위를 수정하고 심지어 확장했다고 생각합니다. 네트워크 명령조차도 서버가 어떤 간격으로 어떤 명령을 실행할지를 추적하면서 지정된 속도로 전송됩니다. 이것은 확실히 각 클라이언트 시뮬레이션이 결정 론적 잠금 단계로 실행되도록하지만, 시간 단계 사이의 작은 세부 사항은 어떻게 결정됩니까? 아니면 귀하의 답변을 오해하고 있습니까? – DangerMcD

+0

네트워크에 연결될 이벤트는 일반적으로 타임 스탬프가 적용됩니다. 또한 서버는 클라이언트와 자체 사이의 시간을 동기화하고 시도하므로 클라이언트의 모든 타임 스탬프가 상당히 정확합니다. 클라이언트에 있었던 마지막 프로젝트에서 "나는이 사람을 죽인 것 같아"라고 보낼 것이고 서버는 그 일이 일어날 가능성이 있는지보기 위해 그것을 평가할 것입니다. 그것은 MMO 였지만 PVP가 없었습니다. 두 번째 플레이어를 추가하면 다른 클라이언트의 두 번째 메시지가 잠깐 동안 기다려서 죽거나 다른 플레이어에 의해 죽었다는 것을 알 수 있습니다. –

답변

0

게임 아키텍처가 어떻게 설계되었는지는 모르겠지만 이벤트의 타임 스탬프를 얻을 수있는 경우 다른 Thread이있는 버퍼에 쉽게 넣을 수 있으며 50ms마다 특정 순서로 처리 할 수 ​​있습니다 .

+0

나는 스레드가없는이 생각을했습니다. 개념적으로이 문제는 타임 스탬프를 저장하지 않아도 아직 타임 스탬프를 이벤트별로 저장해야한다는 것입니다. 비틀 거려야 할 시뮬레이션 방법이 있을지 모르는 불필요한 오버 헤드처럼 보입니다. – DangerMcD

관련 문제