#iphone #ios #cocos2d-iphone #game-center
#iPhone #iOS #cocos2d-iphone #игровой центр
Вопрос:
у меня есть хоккейная игра с молотками, запущенная на iphone / ipad. Сервер управляет всей физикой и отправляет на другое устройство положение молотка сервера, а клиент отправляет на сервер свое положение молотка.
Эта часть работает правильно, проблема в шайбе. Потому что это слишком быстро, и сервер является тем, кто отправляет сообщение. Проблема в том, что puck является телом b2_dynamic, и сервер отправляет клиенту, где находится puck. Я обновил, чтобы отправлять позицию клиенту каждый кадр в 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:amp;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. Просто быстрая мысль, не следует ли вместо этого вычислить физику на клиенте? И просто позволить серверу отправлять силу, которая была установлена на шайбу?
2. я согласен с приведенными выше комментариями. Особенность клиентского сервера в том, что вы должны отправлять клиентам как можно меньше данных. Вычисления должны выполняться на стороне клиента.
Ответ №1:
Вы должны попробовать использовать dead reckoning и рассчитать его для каждой стороны. Используйте хост только для распространения последней игры.
В навигации подсчет времени — это процесс вычисления текущей позиции пользователя с использованием ранее определенной позиции или исправления и продвижения этой позиции на основе известных или расчетных скоростей за прошедшее время и курса.