Как я могу реализовать независимое от кадра движение с выбираемой скоростью

Я изучаю базовое независимое от кадров движение, но у меня есть необходимая потребность в реализации.

Сейчас я ищу код C ++, но мне нужен полный пример внутри GameLoop, который позволяет увеличить скорость. Не постепенное увеличение, а просто способность быстрее перемещать мой спрайт. Я должен перевести код C ++ в vb .net, так как примеров не так много. Итак, позвольте мне прояснить это ->

У меня есть простой GameLoop. В GameLoop у меня есть два вызова функций

Обновить()
Render ()

Я понимаю, что для функции Update () я должен поставить параметр deltaTime. Так и должно быть

Обновление (deltaTime As double)

Поскольку именно так показано большинство примеров в Интернете, я просто скопировал идею, но у меня пока нет фактической настройки, независимой от фрейма.

Как я могу настроить это и вызвать функцию Render.

Пожалуйста, имейте в виду, что если это работает, это нормально — я вырезал и вставил другой пример, подобный этому, но не было никакого способа увеличить скорость движущегося спрайта. Я даже не знаю, с чего начать?

Обратите внимание, если у вас есть только код C ++, я сделаю все возможное, чтобы перевести его, поэтому для меня это приемлемо.

-3

Решение

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

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

Это превратится в довольно простую формулу:
DetlaTime * TheNumberOfPixelsToMoveInASecond,
Если вы умножите его на 10, то спрайт переместится на 10 пикселей за одну секунду. Если его увеличить на 100, он переместится на 100 пикселей за одну секунду.

0

Другие решения

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

Вы можете заметить, если вы запускаете некоторые плохо закодированные игры, предназначенные для старого оборудования, на более новом оборудовании, что игровой процесс идет слишком быстро и становится недоступным для игры на этих быстрых машинах без намеренного замедления. Существуют реальные утилиты замедления просто для решения этой проблемы, такие как Mo’Slow и Cpukiller. Это потому, что эти старые игры были закодированы таким образом, что вещи менялись на постоянную величину каждый кадр вместо переменной на основе прошедшего времени.

Таким образом, чтобы избежать этой проблемы, вы перемещаете все свои спрайты в каждом кадре на числа, кратные deltaTime, Это даст вам ощущение постоянной скорости независимо от скорости машины / среды.

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

0

По вопросам рекламы [email protected]