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

Slides:



Advertisements
Similar presentations
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作 第4回 マルチスレッドとネットワーク. 今日の内容 マルチスレッド – ローディングの進捗表示とか – 処理高速化も見込めます ネットワーク通信 – 必然的にマルチスレッドを扱います.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
本日のスケジュール 14:45~15:30 テキストの講義 15:30~16:15 設計レビュー 16:15~16:30 休憩
プログラマのレベルアップ.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
3DCGコンテンツの基礎 第5回授業:最終課題制作
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
インタラクティブ・ゲーム制作 <プログラミングコース>
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報科学1(G1) 2016年度.
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プロジェクト演習Ⅱ インタラクティブゲーム制作
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
情報 第2回:状態遷移 その2.
第10回 プログラミングⅡ 第10回
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミング演習3 第2回 GUIの復習.
インタラクティブ・ゲーム制作 <プログラミングコース>
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
その他の図 Chapter 7.
図書館職員のための アプリケーション開発講習会
暗黙的に型付けされる構造体の Java言語への導入
プログラミング 4 記憶の割り付け.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プログラミング演習3 第2回 GUIの復習.
インタラクティブ・ゲーム制作 <プログラミングコース>
第6回:ラケットを動かそう! (キーボードによる物体の操作)
実物投影機の使い方 その① テレビにつないでみよう。.
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
デジタル画像とC言語.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
一人暮らしの男性のための料理検索システムの設計
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
情報 第1回:状態遷移 その1.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
15.cons と種々のデータ構造.
オブジェクト プログラミング 第2回 プログラムの基本.
第1章 いよいよプログラミング!! ~文章の表示 printf~
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
基礎プログラミング演習 第6回.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
サブゼミ第7回 実装編① オブジェクト型とキャスト.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
ウェブデザイン演習 第6回.
第5回 プログラミングⅡ 第5回
バネモデルの シミュレータ作成 精密工学科プログラミング基礎 資料.
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
モグラたたき.
データベース第3回目 意味ごとにテーブルを分ける
クラウド・地域人材利用型プログラミング教育実施モデル実証事業 公益財団法人 学習ソフトウェア情報研究センター
リフスロー コードレビュー リフスローチーム 和泉 真 西村 和晃.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
ソフトウェア工学 知能情報学部 新田直也.
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
3.1 シューティングゲームの当たり判定 当たったら死亡.
情報処理Ⅱ 2005年11月25日(金).
プロジェクト演習Ⅱ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報処理Ⅱ 小テスト 2005年2月1日(火).
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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