Как увеличить скорость спрайтов, не заканчивая вращением, а не кружением - PullRequest
0 голосов
/ 17 июня 2011

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

Как я могу это исправить? Спрайт должен идти быстрее и оставаться на том же пути.

вот код:

box.Accelerate(10*Window.GetFrameTime());
box.Turn(360.0*Window.GetFrameTime());

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Если ваш спрайт ускоряется (движется быстрее каждую секунду), но продолжает вращаться с постоянной скоростью 360 градусов в секунду, он всегда будет двигаться по спирали наружу.

Думайте об этом так:

Если ваш спрайт движется по кругу радиусом 1 (т.е. единичный круг), поворачивается со скоростью 360 градусов в секунду и движется со скоростью 2 * пи единиц (то есть по окружности вашего круга) в секунду спрайт будет перемещаться по кругу каждую секунду.

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

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

2 голосов
/ 17 июня 2011

Если вы хотите, чтобы спрайт шел по кругу, укажите это в коде.Например,

float time = Window.GetFrameTime();
angle += speed * (time - lastTime);
lastTime = time;
float x = sinf(angle), y = cosf(angle);
box.SetPos(50*x + center.x, 50*y + center.y);
box.Turn(angle + QUARTER_TURN);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...