ゲームの実装方法についての考察
言語など具体的な書き方じゃなく、実装(クラス)をどのように切り分けるのか、どのようなシーケンスでゲームを動かすのかなどをトピックに分けて考察する場所
ゲーム共通
- シーン遷移
- オブジェクト管理
- 入力に対してのリアクション
- 入力の管理
- サウンド、音楽の管理
- 描画についての管理
とりあえず作ってるモノから考えてみる。
- パッドなどでキャラクターを操作する
- キャラクターは歩いたり跳んだり、ダッシュしたりする
- 相手の攻撃を受けるとヒットストップがかかり状況に応じた喰らい状態になる。もちろんライフも減る
- ガードボタンでガード。この状態の時に攻撃が当たるとガードが成立する。
- 攻撃を相手に当てて、自分ライフが0になる前に相手のライフを0にする。
- 残りライフがゲージ表示と連動して表示される
操作をキャラクタに知らせる
Inputクラスを外側に作っておいて、その内部データへの参照をキャラクタに持たせる方法。Inputクラスが実体化されていないと動作が未定義になってしまうのがアレ。あとCharactorの実装がInputに依存したものになってしまうのもカプセル化の観点から好ましくない。ならば内部で持たせたらどないだろうと思ったが、Inputが必要なのはCharactorだけではないだろうと予測できるのでやはり外側に作っておいたほうが無難。
ではどこまで外側に作るか、という話になる。他シーンと操作を同一にしたいならばシーン外に作るべきだし、そうでないならシーン内に作るべきだろう。ここは緋に倣ってシーン外に設置する方法を取る。
シングルトンクラスとしてInputクラスを作成、ゲーム起動と同時に初期化するようにしておけば、Inputの実体が存在することが保障されるだろう。
Controlerクラスを中に入れておいてvectorで保持。2つしかコントローラーが無いならこんなことする必要は無いが、拡張性を考えてこうしておく。Controlerクラスの中には各種フラグを保持する変数を置いておき、パッドの入力次第でフラグをセットする。
後はその参照を返すインライン関数を定義して、各オブジェクトから参照する。
入力フラグの種類
キーコンフィグの実現
衝突判定
キャラ同士がめり込んだ場合、各キャラの移動ベクトルからキャラの表示位置をズラす必要がある。
キャラが地面にめり込んだ場合、通常状態なら強制で着地状態にして座標を調整。喰らい状態ならダウン状態にして座標を調整。
キャラが壁にめりこんだ場合、位置を調整。三角とびなどを実現する場合は三角とび状態に移行する必要がある?
当たり判定
キャラクタは「ある状態の何F~何Fまで、このような当たり判定データ、攻撃判定データを持つ」といった情報をファイルからロードする。当たり判定データは矩形のリストで1つとは限らない。まったく無い場合もある(完全無敵など)。
当たり判定はハッシュで格納しておく。キャラ状態とフレーム数をキーでデータの参照を持ってくる。CharaManagerクラスみたいなのをCharaの一つ外側に作って、そこで当たり判定処理を書いたほうがしっくりくる?
それらのリストを各グループで総当りで衝突判定する。膨大な飛び道具などを実現する場合はこの方法は問題となるだろう。その時はその時で考えようかな。
連続ヒット技
最終更新:2008年12月22日 02:56