Как совместить игровой цикл artemis-odb + Glenn Fiedler

Я хочу использовать artemis ( https://github.com/junkdog/artemis-odb) для своей игры.

В последнее время я читал об игровом цикле Гленна Фидлера: http://gafferongames.com/game-physics/fix-your-timestep/

Таким образом, упомянутый игровой цикл состоит из двух частей: artemis world.process(); будет иметь место Интегрируемая часть и часть рендеринга.

Любые идеи, как я мог бы сделать что-то подобное с Артемидой.

while(!quit) {
    .....
    while (accumulator >= dt) {
       world.process("only EntitySystems of group1 or with Components X (INTEGRATE STUFF)");
       ....
    }
    ....
    world.process("only EntitySystems of group2 or with Components Y (RENDER STUFF)");
}

Поддерживает ли Артемис этот вид игрового шлейфа?

Единственное решение, которое приходит мне в голову сейчас:

Установите глобальный статический флаг, который указывает, будет ли его интегрировать или визуализировать процесс, а затем закройте все EntitySystem.process(Entity e) методы, когда установлен неправильный флаг. Как это:

@Override
protected void process(Entity e) {
    if(GLOBAL.RENDER_TIME) {
        return; // exit cause, this entity should only be processed when it is INTEGRATE TIME
    }   
}

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

Я думал о том, чтобы иметь 2 Worlds но я не думаю, что могу легко разделить одни и те же экземпляры компонентов между Worldsособенно когда они являются объединенными объектами.

Есть идеи, как совместить игровой цикл artemis-odb + Glenn Fiedler?

РЕДАКТИРОВАТЬ: Просто понял, что я могу использовать setEnabled() отключить и включить EntitySystems, Это будет делать это сейчас.

1 ответ

Решение

https://github.com/junkdog/artemis-odb/wiki/InvocationStrategy

Это то, что я искал

И вот как я это реализовал: https://github.com/TomGrill/logic-render-game-loop

Другие вопросы по тегам