6

私はしばらくの間 Web アプリケーションを開発しており、GUI とゲーム アプリケーションの開発に足を踏み入れました。

Web アプリケーション (私にとっては php) では、ファイルに対して要求が行われ、そのファイルには、情報をメモリに処理するために必要なすべてのファイルが含まれており、フローは要求ごとに上から下になります。(主に)

ゲームの場合、アクションがゲーム ループ内で発生することは知っていますが、ゲームのさまざまな要素 (メニュー システム、GUI、アセットのロード、3D ワールド) を単一のループにレイヤー化して、一定のロードとアンロードを行うにはどうすればよいでしょうか。もの。

GUI プログラムについても同じですが、ある種の「アプリケーション ループ」があると思います。

ほとんどの項目はメモリに呼び出されてからアクセスされますか?項目は必要に応じてリンクされ、メモリにロードされますか?

私が Web アプリケーションをより速く開発するのに役立ったのは、プログラムの流れを理解したときです。詳細に説明する必要はなく、一般的なアイデアや疑似コードだけです。

4

3 に答える 3

14

ほとんどの場合、これらすべてにループがありますが、ほとんどの開発中に考えがちなことではありません。

一歩下がると、Webアプリケーションはループ(Webサーバーのaccept()ループ)に基づいています。

while(listening) {
     get a socket connection;
     handle it;
}

..しかし、Web開発者として、あなたはそれから保護されており、「イベント駆動型」コードを記述します-「誰かがこのURLを要求したら、これを実行します」。

GUIもイベント駆動型であり、イベントはどこかのループによっても検出されます。

while(running) {
    get mouse/keyboard/whatever event
    handle it
}

しかし、GUI開発者はループについてあまり考える必要はありません。彼らは「ここでマウスクリックが発生したとき、これを行う」と書いています。

ゲーム、これも同じです。誰かがループを書かなければなりません:

while(game is in progress) {
    invoke every game object's 'move one frame' method;
    poll for an input event;
}

...他のコードはよりイベント駆動型のスタイルで記述されていますが、「弾丸オブジェクトがこのオブジェクトと一致すると、爆発イベントをトリガーします」。

于 2008-12-18T21:07:04.323 に答える
1

アプリケーションおよびそれほどではないがゲームの場合、ソフトウェアはイベント駆動型です。ユーザーがキーボードまたはマウスを使用して「何か」を実行すると、そのイベントがソフトウェアの残りの部分に送信されます。

ゲームでは、画面とゲームの状態の処理に重点を置いているため、ゲームループは重要です。多くのゲームでリアルタイムのパフォーマンスが必要です。最新の3DグラフィックスAPIを使用すると、画面処理の多くをGPUにダンプできます。ただし、ゲームの状態はメインループによって追跡されます。ゲームのためのチームの努力の多くは、ループの処理を非常にスムーズにすることに焦点を当てています。

アプリケーションの場合、通常、重い処理がスレッドに発生します。同じデータにアクセスしようとする2つのことを取り巻く問題があるため、これは複雑な問題です。この主題に関する本は全部あります。

アプリケーションの場合、シーケンスは次のとおりです。

  1. ユーザーはX、Xを実行し、関連情報(X、Y座標など)がUI_Controllerに送信されます。
  2. UIは、実行するコマンドを決定します。
  3. コマンドが実行されます。
  4. モデル/データが変更されます。
  5. コマンドは、UIのさまざまな領域を更新するようにUI_Controllerに指示します。
  6. UI_ControllerはUIを再描画します。
  7. コマンドが戻ります。
  8. アプリケーションは次のイベントを待ちます。

これにはいくつかのバリエーションがあります。このモデルにより、リスナーはデータの変更を待つことができます。データが取得されると、リスナーはUIを実行して再描画します。

于 2008-12-18T21:05:42.753 に答える
1

ゲーム プログラミングに関しては、私は単なる愛好家でしたが、これは私が普段行っていたことです。

ゲームの「シーン」の非常に一般的な概念を表すオブジェクトがありました。この Scene オブジェクトから派生した、ゲームのすべての主要なセクション。シーンは、ゲームの種類に応じて、実際には何でもかまいません。とにかく、シーンから派生したより具体的な各シーンには、そのシーンに必要なすべての要素をロードする手順がありました。

ゲームのシーンが変わると、アクティブなシーンへのポインターが新しいシーンに設定され、必要なオブジェクトがすべて読み込まれます。

一般的な Scene オブジェクトには、アクティブなシーン ポインターからゲーム ループの特定の時間に呼び出される Load、Draw、Logic などの仮想関数がありました。特定のシーンごとに、これらのメソッドを実装する独自の方法がありました。

そうあるべきかどうかはわかりませんが、物事の流れをコントロールするのにとても簡単な方法でした。シーンのコンセプトにより、複数のシーンをコレクションとして簡単に保存できます。一度に複数のシーン ポインターをさまざまな種類のスタックに格納することで、シーンを予備に保存し、元に戻ったときに完全な状態を維持したり、アクティブなシーンがオーバーレイとしてシーンを描画している間、薄暗くても描画を続けることができます。ある種の。

とにかく、そのようにするとウェブページとまったく同じではありませんが、正しく考えれば十分に似ていると思います。

于 2008-12-18T21:13:58.210 に答える