banner
Olimi

Olimi

SCUT 小菜鸡
github
bilibili

3Dゲームエンジン入門コース6-イベント処理とスクリプト言語

はじめに#

このコラムの内容は、学堂オンラインの 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 クラス:
イメージの説明をここに挿入

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。