ホーム < ゲームつくろー! < ゲーム製作技術編 < ゲーム内にキャラクタを本気で置くには?:サンプルプログラム
その2 ゲーム内にキャラクタを本気で置くには?:サンプルプログラム
ゲーム製作技術編その2「ゲーム内にキャラクタを本気で置くには?」で説明した内容を踏まえたサンプルプログラムです。実行すると丸いキャラクタが1つ出現し、キーボードの1,2,3に割り振られた動作を行います。
サンプルスクリーンショット。ちなみにカーソルはスクリーンコピーできないので後から描きました(^-^;;
各キーには次の動作定義が格納されています:
1 : 現在向いている方向に進む
2 : カーソルの方向に向きを変える
3 : ジャンプする
各動作は複合することができます。また、Shift+各キーで動作をはずす事ができます。
○ プログラムの実行方法
サンプルプログラムはこちらからダウンロードできます(GDEVSmp_No2.lzh(30.7kB))。プログラムは幾つかのヘッダーファイル(.h)と実装ファイル(.cpp)で構成されています。実行形式もありますので、まずは実行させて動作確認をしてみて下さい。
プログラム上から動かすには、空のWindowsアプリケーションを立ち上げ(プリコンパイル済みヘッダーははずしてください)、Sourceフォルダ内にある全てのヘッダーファイルと実装ファイルをプロジェクトに追加するだけです。尚、各クラスはご自由にお使い下さって結構です。
○ ファイルの説明
・ OperateTestSystem.h
タスクを実行するシステムクラスとキャラクタクラスが入っています。
・ Operator.h
「動かす人」たちが入っています。
・ PosInfo.h
位置と方向を操作するインターフェイスとクラスが入っています。Direct3Dベースです。
・ TaskSystem.h
動かす人とキャラクタを結ぶタスクが入っています。
・ smartptr.h、ComPtr.h
スマートポインタとCOMポインタクラスが格納されています。
○ 動作チェックのポイント
システム(COperateTaskSystemクラス)は初期化(Initメソッド)時にタスクを作ります。各タスクが必要とする物を揃え、またキャラクタ(CTestCharacterクラス)を生成して、その位置インターフェイス(IPosInfoインターフェイス)をタスクに渡しています。後はタスクマップ(COperateTaskSystem::m_mapTask)にタスクを登録して初期化完了です。
キーの情報はウィンドウプロシージャで取得しています(main.cpp)。テストなのでベタです。システムの内部には「登録タスクマップ」と「活動中タスクマップ」の2つがあります。更新されるのは活動中タスクマップが持つタスクだけです。この機構があるので付け外しが実現できるわけです。付け外しはITaskSystem::SwitchTaskメソッド内に実装されています。
システムが他のタスクオブジェクトを登録すれば、もっと別の動きも可能です。余裕のある人は自分なりの動かす人を作成して登録してみても良いかと思います。
○ 注意
このプログラムはVisual Studio 2005+DirectXFeb2006で動作を確認しておりますが、他の環境では動かない可能性もあります。うまく動かない方は掲示板にてご連絡下さい。