나는 애드혹 네트워크와 무선 핫스팟을 통해 작동하는 상업용 PSP 레이싱 게임을 위해이 작업을 수행했습니다. (또는 원하는 경우 인터넷의 정적 서버로)
포인트 2로 인해 시스템은 최적화와 관련하여 복잡 할 필요가 없습니다.
내 경험상 이것은 사실이 아닙니다. 무선 장치 (특히 소형 휴대용 장치)는 유선 네트워크 연결이있는 컴퓨터와 다릅니다. 스마트 폰과 무선 게임 콘솔은 게임 목적으로 네트워크 인터페이스 속도가 느린 경향이 있습니다.
오해하지 마십시오. 처리량은 일반적으로 좋으며 (즉, 초당 데이터 양, 스트리밍 영화 등에 좋습니다) 특정 패킷의 배달 대기 시간은 매우 나쁠 수 있으며 그렇게 될 수 있습니다 개별 패킷이 전송되는 데 걸리는 시간을 추정하기조차 어렵습니다. 이 변형은 신호가 서로 간섭하기 시작하면서 더 많은 무선 장치가 하나의 일반 영역으로 묶여 짐에 따라 더욱 악화됩니다. 그 결과 전송에 필요한 패킷 수를 줄이는 데 많은 시간을 들였으므로 패킷 충돌이 줄었습니다. (이는 장치가 Ad Hoc 네트워크를 통해 서로 직접 통신하는 대신 전원이 공급되는 네트워크 핫스팟이 관련된 경우에는 다소 문제가되지 않습니다.)
이런 종류의 최적화의 예로서, 우리 경주 게임은 신호등이있는 세계에서 열렸습니다. 그들 중 수천. 또한 네트워크 세션에서 모든 플레이어간에 신호가 동기화되어 있는지 확인해야했습니다. 모든 조명이 어떤 상태에 있는지 알려주는 패킷을 보내려고 시도하는 대신 모든 신호등에 대한 정적 일정을 정의한 다음 모든 클라이언트가 현재 "게임 시간"에 동의했는지 확인했습니다. 그들은 모두 게임 시간을 알았고 모든 신호등의 상태는 게임 시간에서 확인할 수 있었으므로 실제로는 특별한 데이터를 보내지 않고 모든 상태 데이터를 동기화했습니다. 이 변경으로 인해 네트워킹 성능이 크게 달라졌습니다.
그러나 여러 무선 장치간에 안정적인 클록 동기화 (패킷 손실로 인해 핑 시간이 크게 다름)를 설정하는 것은 큰 도전이었습니다. 당신이 관심이 있다면 그것에 대해 더 이야기 드리겠습니다.
각 고객은 자신과 직계 환경 (예 : 글 머리 기호)에 대한 권위있는 데이터 소스가 될 수 있습니다.
이것이 우리가 한 일이며 우리의 상황 (자동차)에서 잘 작동했습니다. 물론 문제는 객체가 플레이어 'b'보다 플레이어 'a'에 더 가깝게 멈추고 그 소유권이 한 플레이어에서 다른 플레이어로 이전되는 경우입니다.
이것은 실제로 게임 'a'가 게임 'b'를 제안하는 플레이어들 사이의 놀랍도록 복잡한 협상입니다. "이 개체는 당신에게 더 가깝다고 생각합니다. 당신은 그것을 통제해야합니다." 그리고 게임 'b'는 상황에 대한 자신의 견해에 따라 수락하거나 거절 할 수 있습니다. 'a'와 'b'사이의인지 된 게임 상태의 차이, 그리고 요청과 응답이 전송되고 수신되는 시간 사이의 변화는 신뢰성을 얻기 위해 특히 불쾌한 작은 협상을 만들어 내고, "핫 포테이토", 여러 플레이어 사이에서 개체 소유권이 계속 튀어 오릅니다. 그리고 게임 'c'의 유리한 지점에서 볼 때 제대로 작동하더라도
저의 직감은 이러한 종류의 "객체 소유권"접근 방식이 글 머리 기호와 같은 작고 수명이 짧은 개체에는 너무 번거 롭다는 것입니다. 우리는 교통 차량과 AI 레이서에 사용했으며 비교적 긴 시간 동안 시뮬레이션에 살았습니다. 클라이언트를 기꺼이 신뢰한다면 각 플레이어의 게임이 자신의 위치와 발사체를 소유하게하고 다른 플레이어의 발사체에 의해 때렸을 때 선언하는 것이보다 성능이 좋은 접근법처럼 보입니다. ( "게임 A"와 같이, 나는 플레이어 A와 플레이어 A의 발사체의 위치를 말할 책임이 있지만 플레이어 B는 내가 플레이어 B를 때렸는지 말할 책임이 있습니다). 교착 상태가 좋으면 이와 같은 시스템에서 꽤 합리적인 행동을 취할 수 있습니다.