我正在设计一个简单的游戏,它使用 Java 2D 和牛顿物理学。目前我的主要“游戏循环”看起来像:
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
当一个实体被指示更新自身时,它将根据施加在它身上的当前力调整其速度和位置。但是,我需要实体表现出其他行为;例如,如果玩家射杀了“坏人”,则该实体应该被摧毁并从游戏世界中移除。
我的问题:以面向对象的方式实现这一目标的最佳方法是什么?到目前为止,我看到的所有示例都将游戏循环合并到一个名为 like 的 God 类Game
中,该类执行以下步骤:检测碰撞、检查如果坏人杀死、检查如果玩家杀死、重绘等封装所有游戏状态(剩余生命等)。换句话说,它是非常程序化的,所有的逻辑都在 Game 类中。谁能推荐一个更好的方法?
以下是我到目前为止想到的选项:
- 将 a 传递
GameContext
给每个实体,如果需要,该实体可以从中移除自己或更新游戏状态(例如,如果玩家被杀死,则“未运行”)。 - 将每个注册
GameEntity
为中心Game
类的侦听器并采用面向事件的方法;例如,碰撞将导致CollisionEvent
向碰撞中的两个参与者开枪。