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

у меня есть игра в хоккей с молотками, работающая на 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));
}

Что лучше всего отправить клиенту о положении шайбы? Любые идеи или идеи? Я не могу решить это :(


person gmemario    schedule 29.09.2011    source источник
comment
Быстрая мысль, не следует ли вместо этого рассчитать физику на клиенте? И просто позволить серверу направить на шайбу силу, которая была установлена?   -  person Mikael    schedule 30.09.2011
comment
я согласен с приведенными выше комментариями. Суть сервера-клиента в том, что вы должны отправлять клиентам как можно меньше данных. Расчет должен производиться на стороне клиента.   -  person xuanweng    schedule 01.10.2011


Ответы (1)


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

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

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

person Gil Beyruth    schedule 21.09.2012