ゲームクラスと主な機能


8

メインのゲーム機能と画面などのゲームオブジェクトのインスタンスを含むGameクラスがあります。私のゲームはC ++とSDLを使用して作成されています。

しかし、私はクラスの関数をメインにするべきだと思いましたか?それとも「ゲームゲーム」をやればいいの?「int main();」から そして、メインの中にループがありますか?

私の疑問は-外部メインからそれを行う場合、私のもののほとんどはパブリックでなければならないでしょう、そしてそれはちょっと悪いですよね?

何か案は?ありがとうございました!


これは本当に重要なことではありません。あなたが簡単だと思うものは何でも書いてください。それはいずれかの方法または他の多くの方法で行うことができ、選択は実際のゲームに意味のある方法でまったく影響を与えません。
Sean Middleditch 2013

回答:


9

エントリポイントとして機能するクラスに単一のパブリックメソッドGame(たとえば、と呼ばれるメソッドRun())を含めることができます。次に、main()すべてを起動して実行するために内部で行う必要があるのは、そのメソッドを呼び出すことだけです。

このRun()方法は、すべてのサブシステムを初期化することから始まり、メインゲームループに入ることができます。また、ループが終了すると、すべてを適切にシャットダウンすることもできます。

クラスの他のすべては、ゲームの実装でのみ必要となるため、プライベートのままにすることができます(または、継承して具体的なゲームを作成する場合は保護することができます)。

注:完全に最低限の骨、タイミング計算なし、非常に単純なゲームループ、開始するための例にすぎません。実際のゲームでは、これよりもはるかに複雑になるはずです。

class Game
{
public:
    void Run()
    {
        Initialize();
        while(_running)
            Frame();
        Shutdown();
    }

private:
    void Initialize() { /* Initialize subsystems */ }
    void Shutdown() { /* Shutdown subsystems */ }
    void Frame() { /* Update and draw game */ }
    bool _running = true;
}

そしてあなたのmain()方法で:

int main()
{
    Game game;
    game.Run();
    return 0;
}

1
これは通常、その方法です。これにより、ラストチャンスの例外キャッチに適した場所を簡単に提供できるようになります。さらに、ゲームを破棄して簡単に再作成できるようになります。
Patrick Hughes、

1
私は例外に同意します(main()関数でキャッチ)。しかし、なぜゲーム全体を破棄して再現したいのですか?(したがって、メインのSDLウィンドウも?)よくわかりません。
tigrou

5
@ user1083855すべてのゲームが巨大な怪物であるとは限りません。多くのゲームは小さく、単純にゲームオブジェクト全体を削除して再構築するのは、Reset()メソッドを作成してすべての状態をリセットしてクリアすることを覚えておくよりもはるかに簡単です。したがって、記述が速く、デバッグも不要です。一部の大規模なゲームでも、メインメニューに移行または終了するたびにマップなどのエンジンシステムでこれを行うので、実際にどれだけ分解して再構築するかが問題であり、それが悪い考えかどうかではありません。
Patrick Hughes

2
より大きなゲームを構築する場合は、ソフトリセット機能を使用すると便利です。これにより、ユーザーエクスペリエンスが大幅に向上します。一部のゲームでは、ゲームクラスを単に分解および再構築することはできません。ゲームクラスですべてのセットアップと初期化を行った後、それが時間の問題であるとします。ゲームクラスがメニューシステムを制御している場合、現在のゲームタイプを終了したいという理由だけでゲームを再起動しますか? ?これはゲームのデザインに完全に依存しますが、コア機能を追加することは、今よりも優れています。
Matt Jensen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.