1 / 15

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作. 第 3 回 コマンド入力判定と ユーティリティクラス. 今日の内容. コマンド入力判定をしてみよう その処理を通じて「ユーティリティクラス」の作り方を考えよう. ユーティリティクラスとは. 便利クラスの こと FKUT は、 FK というライブラリを使う上でまとまっているとお手軽だったり、便利だったりするユーティリティクラスの集まり 自分でも作 ろう! ゲームでよく使う処理をクラス化しておく どのゲームでも使えそうなものをストックしておくと Very good. FKUT シリーズ トラックボール

Download Presentation

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作 第3回 コマンド入力判定と ユーティリティクラス

  2. 今日の内容 • コマンド入力判定をしてみよう • その処理を通じて「ユーティリティクラス」の作り方を考えよう

  3. ユーティリティクラスとは • 便利クラスのこと • FKUTは、FKというライブラリを使う上でまとまっているとお手軽だったり、便利だったりするユーティリティクラスの集まり • 自分でも作ろう! • ゲームでよく使う処理をクラス化しておく • どのゲームでも使えそうなものをストックしておくとVery good. • FKUTシリーズ • トラックボール • スプライト • オーディオ • シンプルウィンドウ • フルスクリーン • インプット • フレームレート制御 • モーション • 動画再生

  4. 今回のサンプル • fkut_Inputの実践的活用例 • EventManagerを拡張して、SimpleWindowのような入力判定をゲームパッドでも実現 • 某格闘ゲームライクなコマンド判定の実装例

  5. 使い方のポイント • Inputクラスのヘッダを見てみよう • 丁寧なコメントの山が見えます • 誰かに使ってもらうクラスには、これくらいのコメントが理想 • Doxygenを使うとマニュアルが作れるレベル • それ以外のクラスについては。。。 • てへ☆ • 今日の授業を通じてコメント付けておこう

  6. EventManagerの意義 • fk_WindowにしろInputクラスにしろ、「その時点での状態」しか取れない • キー操作は「押した瞬間」「離した瞬間」も重要 • このクラスで以下のような機能を実現 • キーの状態をRELEASE, UP, DOWN, PRESSに分けて定義する • 前回のupdate時の情報を保持し、4種類のステータスが取れるようにする • 生のデータが取れるクラスを、自分のクラスで包み込んで、自分なりに使いやすくする • このようなクラス化を「ラッピング」と呼ぶ

  7. 方向キーの表記について • 格闘ゲームなどでは方向キーの入力方向をテンキー表記することがある • EventManagerでもそれを採用 • 方向入力なし(ニュートラル)は5で表現 7 8 94 N 61 2 3

  8. コマンド判定の実現 • 一般的には2種類の方針が考えられる • キー操作の履歴を一定時間分残しておき、フレームごとにそれぞれのコマンドが成立しているかをチェック • コマンドごとにフラグの集合体を作り、コマンドを構成する入力が合ったらフラグを立てていく。全てフラグが立ったら発動。入力始めから制限時間を過ぎたら不発。

  9. 1つのコマンド判定をオブジェクトとして扱う1つのコマンド判定をオブジェクトとして扱う • コマンドバッファ式も由緒正しい良い方法だが、オブジェクト指向っぽく書くにはフラグ集合体形式がやや有利? • プロでも両方使ってます • 以下のように使えるのが目標 • 判定したいコマンドの個数分、変数(オブジェクト)を用意する • それぞれにコマンド情報をセットする • 毎フレームの関数呼び出しでコマンド成立を判定する • どのコマンドから判定していくかは使う側次第

  10. 条件をデータ化する…? • 「条件分岐」という「処理」に気を取られすぎると、データと処理が癒着したコードを書いてしまいがち • プログラミングの極意! • 何を変数で表すのがベストかを考える • その変数を「入力データ」とし、どう「処理」するかを考える

  11. CommandTriggerクラスの設計 • 必要なデータ • phase • コマンド入力がどの段階まで進んでいるか • regTime • コマンド入力し始めの時間(ミリ秒) • limitTime • そのコマンドを受け付ける制限時間(ミリ秒) • commandArray • 1ステップ分のコマンド判定情報の配列

  12. 判定に必要な情報 • どのキーが、どの状態になればいいのか • これらが変数で取れれば判定できる • でも同時押しの判定はどうしよう? • じゃあどの段階の判定か、も持たせて、同じ段階の判定はまとめて処理するようにしよう • 3つの変数に分かれると面倒だなぁ • じゃあ構造体作って、それの配列にしよう • 必要に応じて、データをまとめたクラス(構造体)を用いると色々スッキリする

  13. 設計の発展案 • 以下には対応できるとモアベター • ため入力 • 入力向きの左右入れ替わり • アナログスティックの入力値 • 上記を実現するために必要なこと • 構造体ではなく、クラス化して継承を用いる • 異なるタイプの判定でも共通の関数で判定できるようにする

  14. いわゆる3D格闘ゲームのコマンド判定は? • いわゆる「PPPK」などのコマンド • 最初のパンチのモーション中に次のパンチボタンが押されたら、2つのパンチのモーションに移行する、という仕組みで実現している • 分かりやすく言えばチェーンコンボをルート限定で設定しているようなもの • 状態遷移の構造化によって実現してるので、これについてはまた別の機会に

  15. 今日の課題 • 右記の入力判定を実現してみよう • CommandTriggerクラスをそのまま使ってもいいし、使う側で色々工夫してもいい • でも出来る限りクラス側を拡張して、使う側は簡単に扱えるようにしよう • 1回転コマンド • ボタン連打コマンド • 4ため646Kコマンド • 瞬獄殺コマンド • アナログ入力で • 任意方向のダッシュ • バーチャロンのジャンプ、しゃがみ、旋回

More Related