Как я могу сделать постоянную высоту отскока, когда игра постепенно ускоряется? - PullRequest
2 голосов
/ 31 марта 2020

Мой главный герой - шар, который постоянно отскакивает от одной и той же силы. Но у меня возникают трудности с поиском правильного способа отскока на той же высоте, на которой игра увеличивает скорость. По сути, вот моя формула.

, кстати, я использую C ++ и SDL2, поэтому ось Y ПОЗИТИВНО понижается, а НЕГАТИВНО повышается:

каждый кадр, я добавляю Yvelocity на бал. Затем я добавляю гравитацию к скорости для эффекта гравитации:

ballY += Yvelocity
Yvelocity += gravity
if(Yvelocity >= maxVelocity)
{
   Yvelocity = maxVelocity
}

Затем, когда я ударяюсь о землю, я делаю это, чтобы отскочить от мяча

Yvelocity = bounceForce; // -10 for example

Все отлично работает. Но я хочу сделать игру все быстрее и быстрее. Таким образом, каждый конкретный c раз, когда я делаю это:

bounceForce += bounceForce * multiplier;
gravity += gravity * multiplier;
maxVelocity += gravity * multiplier;
...
//increase other object's speed too

Скорость игры действительно увеличивается, но отскок мяча также увеличивается.

Похоже, я должен увеличьте гравитацию больше, чем bounceForce . Поэтому я попытался сделать это:

bounceForce += bounceForce * multiplier;
gravity += gravity * (multiplier * 1.5f); ///////    <-------------------------
maxVelocity += gravity * multiplier;
...
//increase other object's speed too

Это отлично работает в начале. Но, вероятно, будет делать ту же проблему с течением времени (отскакивает выше).

Я думаю, чем больше увеличивается Yvelocity , тем больше гравитация множитель тоже должен увеличиться. Поскольку мяч становится легче с каждым увеличением скорости.

Но я действительно не могу найти для этого правильную формулу того, как я могу заставить мяч отскочить все быстрее и быстрее , но на такой же высоты. Поскольку для моей игры не идеально увеличивать скорость, мяч находится на постоянной скорости. Извините, я новичок ie в программировании игр. Заранее спасибо.

1 Ответ

1 голос
/ 31 марта 2020

Простой способ сделать вещи «такими же, только быстрее» - это увеличить ваш временной шаг между кадрами. Конечно, тогда вам нужно явно указать все места, где вы должны иметь такое dt, но жестко закодировать его в 1. (Найти невидимый код всегда весело.)

очевидные места - это, конечно, += s в начале вашего кода (эскиз); ваша динамика может включать в себя больше, если они достаточно сложны. (Также обратите внимание, что ваши уравнения станут значительно неточными с очень большим временным шагом; вы можете захотеть сделать dt меньше (сначала) и выполнить более одного физика цикла на каждый кадр анимации.)

...