Я бы хотел, чтобы ваше предложение по этой проблеме ...Должны ли игры полагаться только на частоту кадров?
Чтобы сделать это простым, я рассмотрю только ось x.
Изображение объекта в позиции 10, а его ширина также 10 единиц, которая движется вперед 100 единиц в секунду, и из-за низкого кадра при каждом обновлении он должен перемещать 80 единиц.
После первого обновления называется, его позиция теперь 90, и есть еще один объект того же размера в позиции 120.
Следующее обновление будет переместить объект позиции 170. Учитывая, что мне нужно осуществлять обнаружение столкновения, вычислять столкновение до или после обновления, никто не будет работать.
Теперь приходит простой вопрос ...
Что делать в этом случае?
ли что-то вроде:
Position start = destinationPos - currentPos;
for (int i; i < start; i++)
if (IsColliding(movingObj.Position + i, staticObj))
//do the colliding stuff here
Мне не нравится это решение, оно может быть хорошо для этого случая, но что, если у вас есть х, у, г и много движущихся объектов?
Другое решение, которое, как я думал, было бы хорошим, но я не уверен, насколько он надежный, - это сделать еще один поток, выполняющий все эти вычисления в цикле.
Этот поток будет чем-то вроде бесконечного цикла, и на каждой итерации я бы вычислил elapsedTime
, который, я считаю, был бы очень маленьким и продолжал двигаться и вычислять столкновения, а поток рендеринга, который был бы намного медленнее, будет получать текущее состояние объектов и просто визуализировать его.
Что вы, ребята, думаете?
Это похоже на логическую вещь, мое главное беспокойство заключается в том, что 'draw' или' render' или что-то будет проходить частично через мой скрипт логики обновления/игры, что приводит к появлению чего-то ненормального, например, пулевую часть через стену, которая еще не удалена или что-то в этом роде. Я должен упомянуть, что основное внимание уделяю JavaScript, поскольку JavaScript действительно асинхронный, что заставляет меня думать, что это скорее риск, чем на других языках. – semicolon