@delphikettle
Программирую в свободное от учёбы время

Какие параметры необходимо передавать методу step объекта World?

Я пишу игру на Java, используя физический движок box2d. Для расчётов физических взаимодействий тел я использую отдельный поток, в котором я вызываю метод step у своего экземпляра класса World. В методе run этого потока я в бесконечном цикле вызываю step и ещё несколько методов, необходимых для дополнительных вычислений. Проблема в том, что между разными итерациями цикла проходит разное время, в зависимости от ситуации, из-за этого скорость движения объектов выглядит разной. Они то летят с бешеной скоростью, то все резко замедляются. А если передавать каждый раз разное время в зависимости от того, сколько времени прошло с последней итерации, то изменяются скорости движущихся объектов.
Также непонятно какие значения передавать в качестве второго и третьего параметров. Если передать очень большие параметры, то начинает всё ужасно лагать, а если передать малые параметры, то иногда не хватает точности расчётов.
В общем, я окончательно запутался что нужно передавать в качестве параметров методу step и где и как его вызывать...
  • Вопрос задан
  • 388 просмотров
Решения вопроса 1
В step передавай постоянное значение и после не вызывай его до тех пор, пока сумма 'дэльт' не превысит это самое значение.
После каждого step можно блокировать поток с физикой до тех пор, пока не произойдет отрисовка в другом потоке (или делай как-то по другому, но на каждый step у тебя должна быть >=1 отрисовка). Я, например, делаю это через обычные wait / notify.
Остальные два аргумента смотри сам. У меня стоит 15 и 30. Не жалуюсь, хотя это, возможно, даже слишком много.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Есть много вариантов решения, но я бы посоветовал отделить физику от графики. Физику считайте через равные интервалы времени, тогда движение предметов не будет рваным. Советую почитать про игровые циклы здесь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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