게임에서 클라이언트 / 서버 네트워크 아키텍처에 대해 배우기 위해 멀티 플레이어 소행성 클론을 구현하고 있습니다. 클라이언트 / 서버 기술에 관한 GafferOnGames 및 Valve의 출판물을 읽는 데 시간을 보냈습니다. 두 가지 개념에 문제가 있습니다.
현재 box2d로 물리를 시뮬레이션하고 초당 약 20 회 세계 상태를 클라이언트에게 보내는 신뢰할 수있는 게임 서버가 있습니다. 각 클라이언트는 수신 한 마지막 몇 개의 스냅 샷을 추적하고 스프라이트의 움직임을 매끄럽게하기 위해 두 상태 사이에서 잠복합니다. 그러나 그렇게 매끄럽지는 않습니다. 그것은 잠시 동안 매끄럽게 될 수 있습니다. 그런 다음 약간 거꾸로 한 다음 다시 매끄럽게 할 수 있습니다. TCP와 UDP를 모두 시도했지만 모두 동일합니다. 내 문제가 무엇인지 알 수 있습니까? (참고 : 나는 이것을 싱글 플레이어 용으로 먼저 구현했으며, 물리 세계를 초당 20 회만 업데이트 할 때 스프라이트 움직임이 60fps에서 완벽하게 매끄 럽습니다).
첫 번째 문제를 해결하기 위해 클라이언트가 box2d 시뮬레이션을 실행하고 서버 스냅 샷이 일치하지 않을 때 스프라이트 위치를 업데이트해야한다고 생각했습니다. 싱글 플레이어 구현이 매끄 럽기 때문에 이것이 더 부드러울 수 있다고 생각했습니다. 이것이 좋은 생각입니까?
위의 문제를 해결하지 않더라도 클라이언트 측 예측에 필요합니까? 예를 들어, 플레이어가 우주선을 움직이려고하면 물리 시뮬레이션없이 소행성, 벽 또는 적의 함선에 충돌했는지 어떻게 알 수 있습니까? 우주선이 서버에서 개체를 쳤다는 스냅 샷을 받기 전에 충돌해야하는 개체를 통과하는 것처럼 보입니다.
감사!