全2385文字
PR

人工知能(AI)の開発などで注目を集めるプログラミング言語「Python」では、「Panda3D」というライブラリーを使うことで、3次元(3D)ゲームも開発できる。Panda3Dの基本的な使い方を紹介するとともに、実際に遊べる「ビー玉迷路ゲーム」を開発する。

ステップ3
オブジェクトを動かす

 オブジェクトを動かすプログラムを作ります。プログラムの内容は、cube1とcube2という2つの立方体を表示し、cube1はキー操作でオブジェクトを移動させ、cube2は自動で回転させる、というものです。sample3.pyというファイルを新しく作り、リスト3のコードを記述してください。実行結果を図8に示します。上矢印キーを押すとcube1がy軸の正の方向(前方)に進み、回転しているcube2をすり抜けていきます。

[画像のクリックで拡大表示]
リスト3 ●cube1を上矢印キーで動かし、cube2を自動で回転させるコード(sample3.py)
リスト3 ●cube1を上矢印キーで動かし、cube2を自動で回転させるコード(sample3.py)
[画像のクリックで拡大表示]
図8 ●リスト3の実行結果
図8 ●リスト3の実行結果
[画像のクリックで拡大表示]

 まずcube1をキー操作で動かすコードを説明します。リスト3の(1)では、上矢印キー(arrow_up)が押されたときに、このあと説明するup_key関数を呼び出します。arrow_upは、キーボードイベントのイベント名です。Panda3Dに用意されているキーボードイベントの主なイベント名を、表1に示します。

表1 ●キーボードイベントの主なイベント名
表1 ●キーボードイベントの主なイベント名
[画像のクリックで拡大表示]

 (3)でup_key関数を定義しています。この関数が呼び出されたら、cube1の現在のy座標に1を加えます。つまり、画面の奥に移動します。

 次にcube2を自動で回転させるコードを説明します。画面上でオブジェクトが動き続けるという表現は、オブジェクトの位置や向きを変えた画面の描画を、1秒間に何度も更新することで実現しています。この画面の更新1回分のことを「フレーム」と言います。1秒間に更新するフレーム数は、パソコンのスペック等によって異なります。Panda3Dでは、フレームを更新するたびに呼び出す特殊な関数のことを「タスク」(Task)と呼びます。タスクを、タスクマネージャー(taskMgr)関数に追加したり削除したりすることで、フレームの更新ごとに様々な処理を並列で行うことができます。

 リスト3の(2)では、タスクマネージャーにrollTaskという名前のタスクを追加し、rollTask関数を呼び出しています。

 (4)でrollTask関数を定義しています。ここでは、globalClock.getDt()を使って、フレーム経過時間(フレームを更新してから経過した時間)を取得して変数dtに格納します。フレーム経過時間は、速度や加速度を計算するために利用します。この変数dtの値と定数velocityを掛けることで、フレーム更新ごとに回転する角度の大きさを設定しています。

 (5)は、rollTask関数の戻り値です。戻り値に応じて、タスクマネージャーがタスクの制御をします。「cont」という戻り値は、タスクマネージャーに「次のフレームで再度このタスクを実行する」ことを指示しています。このようにして、rollTask関数の処理をフレーム更新ごとに(1秒間に何度も)行っています。