Как совместить игровой цикл 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