Я разрабатываю простую игру, в которой используются Java 2D и ньютоновская физика. В настоящее время мой основной "игровой цикл" выглядит примерно так:
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
Когда субъекту дается указание обновить его, он будет корректировать свою скорость и положение на основе действующих на него сил. Тем не менее, мне нужны сущности для проявления другого поведения; например если "плохой парень" снимается игроком, объект должен быть уничтожен и удален из игрового мира.
Мой вопрос. Каков наилучший способ достижения этого объектно-ориентированным способом? Все примеры, которые я видел до сих пор, включают игровой цикл в класс Бога, называемый чем-то вроде Game
, который выполняет следующие шаги: обнаруживать столкновения, проверять-если-плохо-парень убит, проверять-if-player-убил, перекрасить, и т.д. и инкапсулирует все состояние игры (оставшиеся жизни и т.д.). Другими словами, это очень процедурный и вся логика находится в классе Game. Может ли кто-нибудь рекомендовать лучший подход?
Вот варианты, о которых я думал до сих пор:
- Передайте
GameContext
каждому объекту, из которого объект может удалить себя, если потребуется, или обновить состояние игры (например, "не работает", если игрок убит). - Зарегистрируйте каждый
GameEntity
в качестве слушателя в центральном классеGame
и используйте ориентированный на события подход; например столкновение приведет к тому, что aCollisionEvent
будет уволен двум участникам столкновения.