Точные движения с Дельтой Украдите. В SDL с C ++

Я создаю игру 2D с C ++ и SDL, где в управлении времени я использую техническую Дельту, Украл (время дельта) для движений с плавными прокрутками. Выполнение совершенное, однако есть перемещения объектов (платформы), которые зависят от времени, а именно, которое, чтобы двигаться, например, 500px, должно делать это за 6 секунд, все добро до этой точки.

Заметь: Движение вечное, а именно повторяется бесконечно

Проблема случается, когда есть больше объектов, так как, если есть два или более объектов с той же продолжительностью службы и различными скоростями, наблюдается сдвиг фаз отсрочки между объектами, так как они были бы должны прибывать в Вашу судьбу в том же времени. Он понятный, потому что Дельта Украла, у него нет той же отсрочки между каждым кадром и произведи перемещение из-за разнообразных пикселей.

Есть какой-то способ контролировать сдвиг фаз, или другой метод существует для этого типа движения, которое они зависят от специфического времени?

1
задан 09.01.2017, 14:09
0 ответов

То, что ты ищешь, состоит в том, чтобы реализовывать что-то, что называются линейная Интерполяция.

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

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

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

Как ты комментируешь, что estas сталкиваясь в c ++, ищет книжные магазины такой интерполяции как например этот port Tween.

2
ответ дан 03.12.2019, 17:48

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

А именно, прямо сейчас у тебя будет что-то как:

pos = pos + vel*deltaTime.

Вместо этого, ты можешь помещать что-то как:

totaltime+= deltatime
pos = vel * totaltime`

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

0
ответ дан 03.12.2019, 17:48
  • 1
    Podrí чтобы быть solució n, тогда, когда totalTime будет верхним TiempoRequerido , какое-то различие существует totalTime - TiempoRequerido > 0, прибавилось бы это время для pró ximo движение. ¿ Он así или сфокусируйтесь плохо:/? –  10.01.2017, 23:01
  • 2
    Решенный, действительно это была линейная проблема, как об этом упоминает Давид Исла, только tení в который фокусироваться во времени и не posició n как это говорит ответ этого publicació n. jejeje неудача в ló gica programació n большое спасибо всем. –  11.01.2017, 05:30

Теги

Похожие вопросы