Как мне реализовать лучший временной шаг (фиксированный или полуфиксированный) в box2d? - PullRequest
3 голосов
/ 29 марта 2011

Мне было интересно, может ли кто-нибудь помочь мне понять, как исправить мой временной шаг в box2d. Я пытаюсь улучшить игру, которую я только что выпустил Bounce Z Ballz , реализовав лучший временной шаг (в настоящее время я использую встроенный переменный временной шаг). Я читал некоторую полезную информацию, но я не могу понять, как превратить нечто похожее на встроенный шаблон cocos2d / box2d в нечто вроде решения Гленна Фидлера .

TL; DR (я хочу изменить свой временной шаг игры cocos2d / box2d со встроенного переменного временного шага на что-то более последовательное)

Спасибо

Стив

1 Ответ

8 голосов
/ 29 марта 2011

Чтобы реализовать это, вам нужно знать максимальный шаг по времени, который ваш физический движок может сделать, продолжая при этом работать адекватно.Ради аргумента, скажем, это 0,03 секунды.

По сути, во время цикла обновления вместо простой передачи времени дельты времени шага вы захотите разбить его на сегменты такого максимального размера.Таким образом, если время дельты текущего цикла цикла составляет 0,08 секунды, то вам нужно запустить цикл обновления 3 раза с шагом по времени 0,03 с, 0,03 с, 0,02 с.Физическая система все еще прогрессировала 0,08 секунды, но она будет делать это достаточно маленькими шагами для правильной работы.

Update:(float)deltaTime  
{  
    float maximumStep = 0.03;  
    float progress = 0.0;  
    while (progress < deltaTime)  
    {  
        float step = min((deltaTime-progress), maxStep);  
        **PHYSICS STEP(step)**  
        progress += step;  
    }  
}
...