Box2D和GameCenter多人游戏

问题描述:

我有一个在iphone/ipad上运行的木槌游戏。服务器控制所有的物理过程,并向另一个设备发送服务器木槌位置,客户端将他的木槌位置发送给服务器。Box2D和GameCenter多人游戏

这部分工作正常,问题是关于冰球。因为速度太快,服务器就是发送消息的开始。问题是冰球是一个b2_dynamic主体,服务器发送给冰球所在的客户端。我已经更新了在gameLoop上的每一帧发送位置给客户端,但问题在于流程不正常。木槌的动作没问题,但是冰球有点奇怪,我认为冰球的线速度已经到了。

什么Im做是这样的:

[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

你应该尝试使用航位推算和计算它在每边。 使用主机只是最后打分发。

在导航,航位推测是过程通过使用先前确定的位置,或固定,和推进基于已知的或估计的速度超过经过时间,当然该位置计算一个当前位置。

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