簡體   English   中英

Box2D和GameCenter多人游戲

[英]Box2D and GameCenter multiplayer

我有一個曲棍球游戲,在iPhone / iPad上運行槌槌。 服務器控制所有物理並將服務器槌位置發送到另一設備,客戶端將他的槌位置發送到服務器。

這部分工作正常,問題出在冰球上。 因為速度太快,服務器是由誰來發送消息。 問題在於,圓盤是一個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));
}

將冰球位置發送給客戶的最佳方法是什么? 有什么想法或見解嗎? 我無法解決這個問題:(

您應該嘗試使用航位推測法並在每一側進行計算。 僅使用主持人來分發最后一場比賽。

在導航中,航位推算是通過使用先前確定的位置或定位來計算一個人的當前位置,並根據經過或經過的時間和航向的已知或估計速度來推進該位置的過程。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM