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