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