2D 서버 클라이언트 멀티 플레이어 게임 엔진 ( 여기서 시도해 볼 수 있음 )을 작업 중입니다. WebRTC를 사용합니다 DataChannel
. 연결은 피어 투 피어이지만 호스트 피어는 여전히 서버 역할을합니다.
가장 큰 문제 (연결성 제외)는 로컬 입력 예측입니다. 우리는 평소와 같이합니다. 키를 누를 때 플레이어는 즉시 움직이고, 어떤 키를 눌렀는지 호스트에게 알리고, 호스트로부터 데이터를 다시 받아 과거의 위치와 비교합니다. 차이가 있으면 시간이 지남에 따라 위치가 수정됩니다. 이것은 핑이 높더라도 낮은 패킷 손실 또는 PDV 에서 잘 작동합니다 .
손실 또는 PDV가있는 경우 편차가 더 클 수 있습니다. 입력 변경을 나타내는 첫 번째 패킷이 지연되거나 삭제되면 호스트가 나중에 찾아서 로컬 입력 사전 표시보다 나중에 플레이어를 변경하기 시작하기 때문입니다.
플레이어가 움직이면 눈에 띄지 않기 때문에 적용된 보정량을 늘립니다. 이것은 움직일 때와 움직일 때 틈새를 덮는 것 같습니다. 그러나 갑자기 멈 추면 수정이 더 눈에.니다. 그런 다음 PDV 또는 손실이 호스트가 나중에 중지했다고 생각하면 호스트가 오버 슈트하고 데이터를 조금 더 앞당겨서 다시 보내며 수정하면 플레이어가 조금 드리프트합니다. 비정상적인 연결에서 플레이어는 종종 정지 후 눈에 띄게 표류합니다.
다른 게임에서는 이것을 눈치 채지 못했습니다. 이것을 어떻게 완화 할 수 있습니까?