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