2014-07-06 2 views
3

액션 스크립트 3에 대한 Box2D는 결정적이지 않은 것처럼 보입니다. 멀티 플레이어 게임의 경우 물리가 승패를 결정하는 데 중요한 역할을한다는 것을 의미합니다. 마이크로 프로세서가 다른 경우 결과가 각 사용자마다 다를 수 있습니다. 기술 (예 : 인텔 및 amd).AS3에서 결정론 물리를 구현하는 방법은 무엇입니까?

그렇다면 AS3에서 결정 론적 물리학을 구현할 수있는 방법이 있습니까?

감사합니다.

+0

http://blog.handcraftedgames.net/?그 주제에 대해 p = 140 좋은 읽기, 당신은 as3에서 결정적인 엔진을 가질 수 없다. gmae를 위해 매우 단순화되고 맞춤화 된 것을 쓸 수 없다면 – Bartosz

+3

아마 PHP 나 파이썬에서 물리 엔진 서버 측을 작성하려고 시도 할 수있다. 모든 플레이어는 동일한 결과를 얻어야합니다. – Jonan

+0

비슷한 CPU 아키텍처를 사용하는 플레이어와 일치하는 중매 시스템은 어떨까요? – Artemix

답변

0

한 번이 문제가있었습니다.

Shockwave Director에서 Havok 엔진을 사용하여 실제 2 인용 3D 풀 게임을 시뮬레이션했습니다.

정확성과 보안을 위해 서버에서 처리하는 것이 가장 좋습니다. 그러나 서버 측 물리 프로세싱을 수행 할 여력이 없었으며 시작 매개 변수가 같더라도 클라이언트 측 프로세싱이 다른 클라이언트에 대해 다른 결과를 제공했습니다.

이 사례는 모든 멀티 플레이어 게임에 100 % 적용 할 수 없지만 채택 할 수 있습니다. 턴 기반 게임이었고, 각 플레이어는 스트라이크를 만들었고, 볼은 Havok에 의해 처리되었고, 두 플레이어는 동일한 최종 결과를보아야했습니다.

  1. 자신의 차례를 데 플레이어는 선두 선수 :

    그래서 우리는 다음과 같은했다. 그는 파업을한다. 그의 스트라이크 데이터 (스트라이크 포스, 큐 위치 및 회전)는 서버로 전송되고 서버에서 두 번째 플레이어로 전송됩니다.

  2. 두 플레이어가 시뮬레이션을 로컬로 수행합니다. 둘 다 동일한 파업 데이터를 가지므로 결과는 거의 동일합니다.
  3. 리드 플레이어의 시뮬레이션이 중단 된 후, 그는 최종 볼 위치를 서버로 보내고 서버는 두 번째 플레이어로 그것을 보냅니다. 두 번째 플레이어 시뮬레이션이 중지되면 그는 리드 플레이어의 데이터를 사용하여 최종 볼의 위치를 ​​조정합니다. 공이 멈추어 서 약간 다른 위치로 점프 한 것처럼 보일 것입니다.

전체적으로보기에는 너무 부드럽지 않지만 각 턴 시작시 플레이어가 동일한 재생 구성을 볼 수 있습니다.

멀티 플레이어 게임 (와 같은, 아니 회전 연속 동작, 2 명 이상 선수) 비슷한 것은 할 수의보다 일반적인 종류에이 방법을 적용 : 어쩌면,

  1. 어쩌면 무작위 (선택에 기반 레이턴시 등의 특정 데이터).
  2. 모든 플레이어의 모든 행동 데이터를 수집하고 시뮬레이션을 로컬에서 실행합니다.
  3. 때때로지도 플레이어의 데이터 스냅 샷을 만들어 서버 업데이트를 통해 다른 플레이어에게 전송하십시오. 다른 플레이어는 수신 된 데이터에 따라 시뮬레이션을 조정해야합니다 (객체 위치와 각도, 충격 등을 변경). 스냅 샷을 수행하면 시뮬레이션이 더 원활 해지지만 트래픽은 증가합니다.
관련 문제