Flash + Box2d игра в пул перерывы онлайн, потому что кадры не передаются точно, почему? - PullRequest
1 голос
/ 25 декабря 2010

Я работаю над этой игрой в пул:

http://cassinlwbg.facebook.joyent.us/quickpool/main.swf

Пожалуйста, откройте его в ДВЕ окна браузера, вы увидите, что запускается режим 2 игрока.

Когда вы делаете выстрел, каждый выстрел копируется другому игроку.

К сожалению, он недостаточно точен.

Игрок делает выстрел с этим кодом:

protected function makeShot(str:Number, ang:Number):void {

   var vx = str * Math.cos(ang);
   var vy = str * Math.sin(ang);

   var vel = _whiteBall.body.GetLinearVelocity();

   vel.x += (vx * 10);
   vel.y += (vy * 10);

   _whiteBall.body.SetLinearVelocity(vel);

  }

После этого я посылаю аргументы STRENGTH и ANGLE через мой сервер сокетов другому игроку.

Они поступают точно так же (проверено), даже после преобразования строки в число.

Затем я применяю это к удаленному проигрывателю, как к удаленному снимку, вот так:

//run remote shot
public function applyMove(s:Number, ang:Number){
   makeShot(s, angle);
}

Тем не менее, после нескольких выстрелов игра и положение мяча различаются ... что нарушает ход игры.

Кто-нибудь знает почему?

Оба файла игры одинаковы, как вы можете видеть.

Откуда столько отклонений?

С уважением, Мирза

Ответы [ 2 ]

3 голосов
/ 26 декабря 2010

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

0 голосов
/ 26 декабря 2010

Может ли это зависеть от одинакового размера экрана?

Вы уверены, что не используете функцию, которая использует rand? Или как время на входе?

...