Мультиплеер Box2D и GameCenter - PullRequest
       5

Мультиплеер Box2D и GameCenter

0 голосов
/ 29 сентября 2011

У меня есть хоккейная игра с молотками, работающими на iphone / ipad. Сервер контролирует всю физику и отправляет на другое устройство позицию молотка сервера, а клиент отправляет серверу свою позицию молотка.

Эта часть работает правильно, проблема в шайбе. Becuase слишком быстр, и сервер - тот, кто отправляет сообщение. Проблема в том, что шайба является телом 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 голосов
/ 21 сентября 2012

Вы должны попытаться использовать мертвый расчет и рассчитать его на каждой стороне. Используйте хост только для распространения последней игры.

В навигации расчет бездействия - это процесс вычисления текущей позиции с использованием ранее определенной позиции или фиксированной точки и ее продвижения на основе известных или расчетных скоростей за прошедшее время и курс.

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

...