Точность Float и Math в разных системах - PullRequest
0 голосов
/ 31 января 2011

Я хочу внедрить функцию записи игрового процесса в проект, которая будет записывать только вход игрока и начальный уровень ГСЧ в начале уровня.Тогда я мог бы взять такую ​​запись и воспроизвести ее на своем компьютере, чтобы проверить ее на достоверность.

Меня интересуют только некоторые числовые различия, которые могут появляться между различными версиями Flash Player, операционными системами или процессорами (иливсе, что может быть затронуто).Проект будет написан для Flash Player 10.0.0+.Какие вещи меня интересуют:

  • Операции над числами: умножение, деление;битовые операции (возможно, битовое смещение тоже);сложение и вычитание;по модулю
  • Класс математики: грех, cos и atan2;округление
  • localToGlobal / globalToLocal с вращением и масштабированием

Я не буду использовать такие вещи, как hitTest, getObjectsUnderPoint, hitTestPoint, getBounds и так далее, все столкновения будут геометрическими.*

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

Ответы [ 3 ]

1 голос
/ 31 января 2011

Это интересный вопрос ...

Это не вопрос «будет ли эта игра играть одинаково на нескольких платформах», это «вопрос о том, будет ли запись пользовательских данных давать точно такой же результат при моделировании».

Моя интуиция сказала бы: «Не беспокойся об этом, флэш-ВМ отвлекает различия», но потом, как я думаю, есть некоторые области, которые могут быть проблемой.

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

Точность с плавающей точкой должна быть в порядке. Алгоритмы, определяющие время округления, хорошо документированы в IEEE-754, и все виртуальные машины используют 64-битные числа независимо от того, на какой ОС они работают. Я предполагаю, что математические операции одинаково понятны.

Я думаю, что хорошо избегать hitTest и еще много чего. Я полагаю, что на них теоретически может повлиять использование аппаратного ускорения или нет. Но я там не эксперт, так что, возможно, нет.

Теперь localToGlobal / globalToLocal ... Я просто не знаю. У них может быть эта теоретическая проблема с аппаратным ускорением, но я склонен сомневаться в этом.

Так что, думаю, я не дал никаких реальных ответов.

1 голос
/ 08 апреля 2011

Триггерные функции НЕ РАБОТАЮТ!Вы должны создать пользовательские реализации следующего: acos, asin, atan, atan2, cos, exp, log, pow, sin и sqrt.И, очевидно, random ().

Я все еще в процессе тестирования класса Number.Я не могу точно сказать, является ли дополнение / вычитание / и т.д.будет последовательным на каждой машине.

0 голосов
/ 31 января 2011

Маловероятно (хотя и возможно), что на разных компьютерах все будет вести себя заметно по-разному. Даже если бы они это сделали, это было бы очень редким событием, о котором я бы не рекомендовал беспокоиться, если только это абсолютно не важно для игрового процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...