0
我有一個在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));
}
最新最好的發送圓盤位置給客戶的?任何想法或見解?我不能設法解決這個:(
只是一個快速的想法,你不應該計算客戶端上的物理?只要讓服務器發出已經設置在冰球上的力量? – Mikael
我同意上述意見。關於服務器客戶端的一點是,您應該儘可能少地向客戶端發送數據。計算應該在客戶端完成。 – xuanweng