Box2D和GameCenter多人游戏

时间:2011-09-29 17:41:29

标签: iphone ios cocos2d-iphone game-center

我有一个曲棍球比赛,在iphone / ipad上运行mallets。服务器控制所有物理并向其他设备发送服务器槌位置,客户端将其槌位置发送给服务器。

这部分工作正常,问题在于冰球。因为太快了,服务器就是发送消息的人。问题是冰球是一个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));
}

最好将冰球位置发送给客户?任何想法或见解?我无法解决这个问题:(

1 个答案:

答案 0 :(得分:0)

你应该尝试使用航位推算并在每一侧进行计算。 使用主持人只分发最后一场比赛。

  

在导航中,航位推算是通过使用先前确定的位置或修正来计算当前位置的过程,并根据已知或估计的速度超过经过的时间和路线推进该位置。

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