私は、Java2Dとニュートン物理学を使用する単純なゲームを設計しています。現在、私のメインの「ゲームループ」は次のようになっています。
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
エンティティがそれ自体を更新するように指示されると、エンティティに適用されている現在の力に基づいて速度と位置を調整します。ただし、他の動作を示すエンティティが必要です。たとえば、「悪者」がプレイヤーに撃たれた場合、エンティティは破壊され、ゲームの世界から削除されます。
私の質問:オブジェクト指向の方法でこれを達成するための最良の方法は何ですか?これまでに見たすべての例では、ゲームループをのような神のクラスに組み込んでいます。このクラスは、衝突の検出、悪者の殺害の確認、プレーヤーの殺害の確認、塗り直しなどGame
の手順を実行します。すべてのゲーム状態(残りのライブなど)をカプセル化します。言い換えれば、それは非常に手続き的であり、すべてのロジックはGameクラスにあります。誰かがより良いアプローチをお勧めできますか?
これまで私が考えたオプションは次のとおりです。
GameContext
エンティティが必要に応じて自分自身を削除したり、ゲームの状態を更新したりできる各エンティティにaを渡します(たとえば、プレーヤーが殺された場合は「実行されていません」)。GameEntity
それぞれを中央クラスのリスナーとして登録しGame
、イベント指向のアプローチを取ります。たとえば、衝突は、衝突CollisionEvent
の2人の参加者に解雇される結果になります。