2011-09-29 6 views
0

iphone/ipad에서 실행되는 말렛이있는 하키 게임이 있습니다. 서버는 모든 물리학을 제어하고 다른 장치에 서버 말렛 위치를 보내고 클라이언트는 말렛 위치를 서버에 보냅니다.Box2D 및 GameCenter 멀티 플레이어

이 부분은 제대로 작동하지만 문제는 퍽에 대한 것입니다. Becaase는 너무 빠르며 서버는 메시지를 보내는 onde입니다. 문제는 퍽이 b2_dynamic 몸체이고 서버가 퍽이있는 클라이언트에 서버가 보내는 것입니다. gameLoop의 모든 프레임마다 위치를 클라이언트에 보내도록 업데이트했지만 문제는 올바르게 흐르지 않습니다. 망치의 움직임은 괜찮 으면 좋겠지 만, 그 퍽이 조금은 이상한데, 나는 그것이 퍽의 선형 속도 때문이라고 생각합니다.

이 무엇 메신저 행함 :

[gamedelegate movePuckToX:messageData->x andY:messageData->y andAngle:0.0]; 


- (void) sendMovePuck { 
MessageMovePuckTo message; 
message.message.messageType = kMessageTypeMovePuck; 

float_t pX = puck->GetPosition().x; 
float_t pY = puck->GetPosition().y; 

message.x = pX; 
message.y = pY; 

NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageMovePuckTo)];  
[self sendData:data];  
} 


-(void)movePuckToX:(float_t)x andY:(float_t)y andAngle:(float_t)ang 
{ 
    lastPuckReceivedPosition = b2Vec2(x, [self getScreenSize].height/32 - y); 
    puck->SetAwake(false);   
    puck->SetTransform(b2Vec2(x, [self getScreenSize].height/32 - y), 0);   
    puck->SetLinearVelocity(b2Vec2(0,0)); 
} 

뭐죠 클라이언트에 퍽의 위치를 ​​전송하는 가장 좋은? 어떤 아이디어 나 통찰력? 나는 이것이 :(해결하기 위해 관리 캔트

+0

간단히 생각해 봅시다. 대신 클라이언트에서 물리학을 계산하면 안됩니까? 그리고 서버가 퍽에 설정된 힘을 보냅니다. – Mikael

+0

위의 의견에 동의합니다. 서버 클라이언트에 관해서는 가능한 한 적은 데이터 만 클라이언트에 보내야한다는 것입니다. 계산은 클라이언트 측에서 수행되어야합니다. – xuanweng

답변

0

당신이해야 추측 항법 (dead reckoning)을 사용하여 시도하고 각 측면에 그것을 계산합니다. 사용하여 호스트 그냥 마지막 경기를 배포 할 수 있습니다.

탐색에서

는, 추측 항법는 과정입니다 공지 또는 추정 된 경과 시간에 따른 속도 및 코스에 기초하여 그 위치를 미리 결정된 위치를 사용하여, 또는 수정 한 진행하여 자신의 현재 위치를 계산하는 단계를 포함한다.

http://en.wikipedia.org/wiki/Dead_reckoning

관련 문제