Pythonをゲーム組み込みスクリプトとして使う考察
- メリットかも
インタプリタの組み込みが簡単に行える。
おかげで自作スクリプト処理を書く必要が無い。
CやC++との糊付け作業に手間を軽減する手段がある。*1
Pythonを使って覚える必要がありるので潰しが利く。
ほぼC++の言語仕様と同等のことが行える。*2
既存のPython標準モジュール群も恐らく使用可能。
- デメリットかも
用意されてる超高水準APIがあんまり融通利かない。*3
配布サイズが少々大きくなるかも。*4
Pythonインタプリタで使用されるメモリ管理はインタプリタが行う。*5
組み込みに関しての日本語の情報があんまない。
3Dアプリケーション等ではたくさんの組み込み実績はあるようだがゲームはあんま知らない。*6
番外:BoostPythonを使用するとなんかメモリリークチェックに引っかかる。*7
まず準備
ヘッダincludeして、超高水準APIを呼べば即効"ようこそ世界"が可能。チョー簡単。
インタプリタ組み込んだだけでは"ようこそ世界"ぐらいしかやることが無いので
Pythonからアプリケーションを操作するPythonモジュールを作る必要があります。
どこを如何スクリプト側に処理を任せるかによって実装も変わってくると思います。
ちなみに拡張モジュールの作成方法はPythonドキュメントに載ってます。
SWIGやBoostPythonを使ったほうが楽でしょうけど。
さてどうしようか
んで実際使用する方法を色々考えてみました。
- コールバック的に使う
ゲーム内の特定条件をトリガーに局所的にPythonインタプリタを使用する。
あんまり思いつけないな・・・
- ゲーム全体の制御に使う
ゲームループ部をPythonで書き、シーン変更等もすべてPythonスクリプト上で行う。
速度が必要だと思われる所(描画更新処理など)は拡張モジュール化する。
メインのPythonインタプリタを停止することが出来ないので上に書いたような
局所的に別スクリプトを動かしたいならサブインタプリタ等を使用する必要がありそう。
しかしこれではPythonバインディングでゲーム作るのと変わらないなぁ・・・。
長々と書いてみたが、今の所スマートにインタプリタ実行中に一時停止させて
アプリケーション側に処理を戻す方法が思いつかないのが辛いなぁ。
どうしてもスレッド使うしかない気がする。