我有一个曲棍球比赛,在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));
}
最好将冰球位置发送给客户?任何想法或见解?我无法解决这个问题:(
答案 0 :(得分:0)
你应该尝试使用航位推算并在每一侧进行计算。 使用主持人只分发最后一场比赛。
在导航中,航位推算是通过使用先前确定的位置或修正来计算当前位置的过程,并根据已知或估计的速度超过经过的时间和路线推进该位置。