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