はじめに#
このコラムの内容は、学堂オンラインの MOOC「3D ゲームエンジンアーキテクチャデザイン基礎」の内容です。個人的には、テキストと画像のバージョンに変換しました(個人的には、テキストバージョンのチュートリアルの方が読む速度がはるかに速いため、参照が容易です)。
元のコースリンク:3D ゲームエンジンアーキテクチャデザイン基礎。
イベント処理とスクリプト言語#
イベント処理とスクリプト言語の概要#
イベント処理#
イベント駆動型のゲームインタラクション制御:
ゲームエンジンのイベント処理方法は、エンジンアーキテクチャの設計とスタイル全体に影響を与えます。イベント処理はエンジンアーキテクチャの基本的な設計であり、エンジンのもう一つの主要なコンテンツである(もう一つはシーン管理とレンダリングです)。ゲームエンジンのループアーキテクチャスタイルには 3 つの種類があります。
- コールバック駆動フレームワークのインタラクション制御方法
イベント処理はコールバック関数によって実行されます。以下に示す例です:
イベント処理メカニズムのフレームワークの概要:
- イベント更新ベースのインタラクション制御方法
- ウィンドウメッセージポンプのインタラクション制御方法
上記のイベント処理メカニズムでは、コールバック駆動方式は主にウィンドウや外部入力デバイスのイベントに適用され、イベント処理メカニズムが使用されます。イベント更新ベースの方法は、主にシーンレンダリングのフレームタイムの更新に適用され、コールバック関数を使用して更新を実現できます。ウィンドウメッセージポンプの方法は、既存の GUI フレームワークにインタラクション制御を統合するために使用されます。
イベント処理の設計思想、オブザーバーパターン:
オブザーバーパターンを適用することで、イベントとイベント処理メソッドの定義時の結合度が低くなります。
スクリプト言語#
従来のコンパイル - リンク - 実行プロセスを短縮するために作成されたコンピュータプログラミング言語であり、コンパイル言語の拡張言語でもあります。その構文は比較的単純で、アプリケーションに密接に関連しており、アプリケーションの関数を直接呼び出すことができますが、一般的には汎用性を持っていません。その特徴には、インタプリタ方式、軽量、迅速なイテレーションのサポート、使いやすさがあります。一般的なスクリプト言語には、Python、Lua、JavaScript などがあります。
ゲームエンジンとスクリプトの関係の概要は次のとおりです:
組み合わせの方法は次のとおりです:
スクリプト言語のインターフェース定義:
イベント処理の実装例#
OGRE のイベント処理#
OGRE のイベント:
したがって、OGRE のイベント処理の中心はレンダリングイベントの処理であり、主要なクラスであるFrameListenerは次のようになります:
さらに、frameRenderingQueued フレームレンダリングキューイベントについて詳しく説明します:
OGRE のレンダリングイベントリスナー関連クラス:
外部イベントは OGREBites モジュールで実装されています。OGREBites モジュールの ApplicationContext クラスは FrameListener クラスのサブクラスであり、便利なイベントリスナーインターフェースを提供します。OGREBites モジュールの InputListener 構造体は、キーボード、マウス、タッチなどの入力イベントのコールバック関数を定義します。その他の OGREBites モジュールの外部クラスには、ウィンドウイベントクラス、GUI コントロールイベントクラスなどがあります。
ApplicationContextクラスとイベント処理に関連する部分:
Panda3D のイベント処理#
Panda3D のイベント処理メカニズムの中のタスクの概念:
Panda3D イベントの中心クラス図:
タスククラス間の関係:
AsyncTask クラスのインターフェース:
イベント処理メカニズムと関連するクラス:
イベントハンドラの詳細な解説:
イベントオブジェクトの定義と処理の例:
GUI クラス: