プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4 2011/10/25 コマンド入力判定と ユーティリティクラス 今日の内容 • コマンド入力判定をしてみよう • その処理を通じて「ユーティリティクラ ス」の作り方を考えよう ユーティリティクラスとは • 便利クラスのこと – FKUTは、FKというライ ブラリを使う上でまと まっているとお手軽だっ たり、便利だったりする ユーティリティクラスの 集まり • 自分でも作ろう! – ゲームでよく使う処理を クラス化しておく – どのゲームでも使えそう なものをストックしてお くとVery good. • FKUTシリーズ – – – – – – – – – トラックボール スプライト オーディオ シンプルウィンドウ フルスクリーン インプット フレームレート制御 モーション 動画再生 今回のサンプル • fkut_Inputの実践的活用例 • EventManagerを拡張して、 SimpleWindowのような入力判定を ゲームパッドでも実現 • 某格闘ゲームライクなコマンド判定の 実装例 使い方のポイント • Inputクラスのヘッダを見てみよう – 丁寧なコメントの山が見えます • 誰かに使ってもらうクラスには、 これくらいのコメントが理想 – Doxygenを使うとマニュアルが作れるレベル • それ以外のクラスについては。。。 – てへ☆ – 今日の授業を通じてコメント付けておこう EventManagerの意義 • fk_WindowにしろInputクラスにしろ、 「その時点での状態」しか取れない – キー操作は「押した瞬間」「離した瞬間」も重要 • このクラスで以下のような機能を実現 – キーの状態をRELEASE, UP, DOWN, PRESSに 分けて定義する – 前回のupdate時の情報を保持し、4種類のステー タスが取れるようにする • 生のデータが取れるクラスを、自分のクラス で包み込んで、自分なりに使いやすくする – このようなクラス化を「ラッピング」と呼ぶ 方向キーの表記について • 格闘ゲームなどでは 方向キーの入力方向 をテンキー表記する ことがある • EventManagerでも それを採用 – 方向入力なし(ニュー トラル)は5で表現 789 4N6 123 コマンド判定の実現 • 一般的には2種類の方針が考えられる – キー操作の履歴を一定時間分残しておき、 フレームごとにそれぞれのコマンドが 成立しているかをチェック – コマンドごとにフラグの集合体を作り、 コマンドを構成する入力が合ったらフラグを 立てていく。全てフラグが立ったら発動。 入力始めから制限時間を過ぎたら不発。 1つのコマンド判定を オブジェクトとして扱う • コマンドバッファ式も由緒正しい良い方法だ が、オブジェクト指向っぽく書くにはフラグ 集合体形式がやや有利? – プロでも両方使ってます • 以下のように使えるのが目標 – 判定したいコマンドの個数分、 変数(オブジェクト)を用意する – それぞれにコマンド情報をセットする – 毎フレームの関数呼び出しでコマンド成立を判定 する • どのコマンドから判定していくかは使う側次第 条件をデータ化する…? • 「条件分岐」という「処理」に気を取ら れすぎると、データと処理が癒着した コードを書いてしまいがち • プログラミングの極意! – 何を変数で表すのがベストかを考える – その変数を「入力データ」とし、 どう「処理」するかを考える CommandTriggerクラスの設計 • 必要なデータ – phase • コマンド入力がどの段階まで進んでいるか – regTime • コマンド入力し始めの時間(ミリ秒) – limitTime • そのコマンドを受け付ける制限時間(ミリ秒) – commandArray • 1ステップ分のコマンド判定情報の配列 判定に必要な情報 • どのキーが、どの状態になればいいのか – これらが変数で取れれば判定できる • でも同時押しの判定はどうしよう? – じゃあどの段階の判定か、も持たせて、 同じ段階の判定はまとめて処理するようにしよう • 3つの変数に分かれると面倒だなぁ – じゃあ構造体作って、それの配列にしよう • 必要に応じて、データをまとめたクラス (構造体)を用いると色々スッキリする 設計の発展案 • 以下には対応できるとモアベター – ため入力 – 入力向きの左右入れ替わり – アナログスティックの入力値 • 上記を実現するために必要なこと – 構造体ではなく、クラス化して継承を用いる – 異なるタイプの判定でも共通の関数で判定で きるようにする いわゆる3D格闘ゲームの コマンド判定は? • いわゆる「PPPK」などのコマンド – 最初のパンチのモーション中に次のパンチボ タンが押されたら、2つのパンチのモーショ ンに移行する、という仕組みで実現している – 分かりやすく言えばチェーンコンボをルート 限定で設定しているようなもの • 状態遷移の構造化によって実現してるの で、これについてはまた別の機会に 今日の課題 • 右記の入力判定を 実現してみよう – CommandTriggerク ラスをそのまま使って もいいし、使う側で 色々工夫してもいい – でも出来る限りクラス 側を拡張して、使う側 は簡単に扱えるように しよう • • • • 1回転コマンド ボタン連打コマンド 4ため646Kコマンド 瞬獄殺コマンド • アナログ入力で – 任意方向のダッシュ – バーチャロンのジャン プ、しゃがみ、旋回
© Copyright 2024 ExpyDoc