チームせかいじゅコードレビュー モンパン大解剖しちゃいます!.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

UGUI を 使ってみよう ( 導入・紹介?編 ) 1. uGUI とは O Unity 4.6 から使えるようになった UI (ユー ザーインターフェース)システム O 8 月: Unity4.6 β uGUI 試用版公開 O 11 月: Unity4.6 uGUI 正式版公開 正式版公開で、 機能紹介ブロ.
特別支援教育で使える PowerPoint の活用法 研修 最低限必要なスキルはこれでバッチリ!! ICT 活用支援員 高松 崇.
JMP version5(以上) 日本語版のScripting Languageによる プログラミング
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
Generic programming と STL
総評 野田久順.
オブジェクト指向プログラミング(4) 静的分析(2)
3DCGコンテンツの基礎 第5回授業:最終課題制作
プログラミング基礎I(再) 山元進.
Java言語による シューティングゲーム作成
アルゴリズムとデータ構造1 2007年6月12日
プログラミング演習3 第4回 ミニプロジェクト.
RAD Studio 14/09/27 TEffectを使った綺麗なForm
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
構造体.
さとりすと Satori Ghost Editor 里々ゴーストの統合開発環境を作ったよ page: 1/25
Boost.勉強会 #8 大阪 ( ) C++ Tips 3 カンマ演算子編.
ゲームプログラミング体験演習
情報学部 プログラミング体験教室 (初級編)
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
第四回 ゲーム                 05A1054         前田嵩公.
Handel-Cを用いた ちょっとレトロ な 「よけゲー」 の設計
経営工学基礎演習a PowerPointの利用.
迷宮師 コードレビュー チームカテキン.
オーサリングツール&ブラウザの 技術的トピック
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
Unity, C# シーン移動と1人称視点.
C言語を用いたシューティング ゲームの作成
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
はぐれたメルでプログラムを 担当した一人の仁藤が 授業開始前の2時間くらいで作成
プログラミング演習3 第2回 GUIの復習.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
ゲームプログラミング講習  第3章 ゲーム作成 ブロック崩しを作ります ゲームプログラミング講習 第3章 ゲーム作成.
・タイプ別のフレームワーク ・デジタルTips(小技テクニック情報)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プロジェクト演習Ⅱ インタラクティブゲーム制作
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
オブジェクト指向プログラミング クラス 継承
プロジェクト演習 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
バネモデルの シミュレータ作成 精密工学科プログラミング基礎 資料.
モグラたたき.
JAVA入門⑥ クラスとインスタンス.
高度プログラミング演習 (11).
リフスロー コードレビュー リフスローチーム 和泉 真 西村 和晃.
モジュール分割.
コンパイラ 2012年10月11日
C言語を用いたゲームの作成 種田研究室 05A2055 松井和幸.
ソフトウェア工学 知能情報学部 新田直也.
Javaを用いたシューティングゲーム作成
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
3.1 シューティングゲームの当たり判定 当たったら死亡.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
FPS(続き).
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
うかべん 大阪#9 Uka3D資料.
第0.5回: ~Unity Editorの操作方法~
Presentation transcript:

チームせかいじゅコードレビュー モンパン大解剖しちゃいます!

目次 はじめに 役割分担 モンパン大解剖! モンパンも継承使ってます! モンパンのゲームシーン作られ方 モンパンの作られ方 ちょっとコアなお話 Kinectのお話 STL・CSV・boostのお話 トゥーンレンダリングのお話 こういうのがあると便利だよ! ショートカットキー 継承図 まず一年半を振り返って その他のオススメ教えます! 質疑応答

はじめに

役割分担 辻 圭佑 大塚 義弥 門馬 翔 細かい仕様 問題発生時 リードプログラム 仕様書からその時 Kinect プログラムの統合 大塚 義弥 リードプログラム Kinect プログラムの統合 辻 圭佑 STL boost CSV システム 門馬 翔 シェーダー、 UI 画像作りも行う 細かい仕様 仕様書からその時   手の空いた人が可能な   仕様を実装する。 問題発生時 メンバー内でも質問は大事

モンパン大解剖!

モンパンに登場する多彩な敵のモンスター達! これらは全て、もとは一つのクラスから継承しています。 モンパンも継承使ってます! 継承が使われている具体例 モンパンに登場する多彩な敵のモンスター達! これらは全て、もとは一つのクラスから継承しています。

じゃあどう使えばいいの? モンスター 全部違って見えるけど、 みんな名前があって、形があって、 攻撃してくるんだよね??

共通項を見出そう! クラスはメンバ変数や関数を持つ メンバ変数として メンバ関数として void モーション再生(); void 描画(); ・名前 ・モデルデータ ・速度 ・位置 ・影 ・状態 etc…

共通項でできたクラス Enemyクラス コード 具体的にするのは継承先で! これぞ抽象クラス! 全ての敵モンスターの もととなるクラス。 共通の変数や、関数を持つ。 名前 モデルデ―タ virtual void モーション再生(); virtual void 描画(); virtual void 攻撃(); コード 具体的にするのは継承先で!                 これぞ抽象クラス!

継承先で具体化 ボボール ボボールのヘッダー エフェクト 移動 パンチ後 ダメージ後 炎をまとっている プレイヤーに向かって 飛んでくる   飛んでくる パンチ後 パンチのベクトルで飛ぶ ダメージ後 ぶつかると死亡 ボボールのヘッダー

継承先で具体化 ライノス エフェクト なし 移動 一直線に進む パンチ後 弧を描いて飛ぶ ダメージ後 押し戻しあり ライノスのヘッダー

処理比較 ボボールのダメージ処理 ライノスのダメージ処理 ダメージを与えるとここで死亡 ダメージを与えると プレイヤーを押し戻して モーション切り替え ライノスのダメージ処理

継承にできること 同じ関数名で違う処理ができる。 Enemy *monsters[3] monsters[0] = new FireBall(); monsters[1] = new Rhinos(); monsters[2] = new Monkey(); for(int i = 0; i < 3; i++){ Monsters[i]->update(); } 各クラスが持つupdate()の 中身の処理を行ってくれる。

継承にできること 共通項を持つクラスから派生できる 新たな要素を加えられる。 Enemy

こんなことができる! 既存クラスを拡張することができる! 自分たちのオリジナルクラスにしよう! たとえばFKUT 画像を読み込んだりする 拡張版 拡大縮小を行ったりできるクラスに拡張! fkut_SpriteModel Instruct_UI 自分たちのオリジナルクラスにしよう!

継承の利点まとめ 同じ関数名で違う処理ができる。 新たな要素を加えられる。 既存クラスを拡張することができる!

ゲームシーンの作られ方 ゲームシーンも複数の変数でできている。 プレイヤー UI ステージ 敵モンスター BGM

コードで見ると ゲームシーンもクラス ゲームシーンもクラス 大まかな変数一覧 Game_kinectクラス Base_EManagerクラス プレイヤーとなるもの Base_EManagerクラス 全ての敵を管理する Stage_Managerクラス ステージモデルの管理 ゲームシーンもクラス

実際に遊ぶ部分の処理 それぞれが必要な情報を受け取り更新 ・EffectMはEnemyMの敵情報を受け取る ・Playerはref_kinectから情報を受け取る ・EnemyMはPlayerやEffectMなどの情報を受け取る

実際に遊ぶ部分の処理イメージ Play_Update()関数 ref_kinect Player EnemyM scene HP_UI Combo_UI Stage EnemyM BGM HP_UI EffectM scene camera ref_kinect それぞれが必要な情報を受け渡しあう Play_Update()関数

各シーンの設定は継承先で! 継承先で細かく設定する PlaySceneクラス ステージ1 ステージ2 ボス戦 などなど。。。 ステージの明るさ 敵の種類、数、配置 ステージのモデル 新しく加えるもの (ボスなど)

じゃあポーズ画面は? 遊ぶ意外に Switch文を使う switch(ゲームの状態){ case ゲームプレイ: 処理; break; ゲームオーバー ステージクリア    これらの状態がある。 Switch文を使う  switch(ゲームの状態){ case ゲームプレイ: 処理; break; case ポーズ画面:  }

実際のコード Scequence()関数 Scene_State Play_Update() Pause_Update() シーンの状態 Play_Update() 先ほどの実際に遊ぶ処理 Pause_Update() ポーズ画面の処理 Over_Update() ゲームオーバー処理 Clear_Update() クリア画面処理 Load_Update() ロード画面処理

パズルゲームも同じ 状態を遷移しながら遊ぶ ドロップを動かす状態 ドロップの位置確認 消せるドロップを消す 指が離れたら次へ 確認終わると次へ 消せるドロップを消す 消し終わると1へ

ゲームシーン作られ方まとめ ゲームシーンも一つのクラスである。 いくつものメンバ変数を持つ。 変数(インスタンス)が情報を受け渡し合う。 継承によって各シーンの設定ができる。 ポーズなどはswitch文で!

モンパンの作られ方 ? ? ステージ1 ステージ2 ボス戦 シーンが作れても、 シーンの切り替えはどうするの?

モンパンの作られ方 キーワードはこれじゃ! ・列挙体 enum型 ・シーン切り替えを行うクラス ・switch文 ・int型の関数

手順1 列挙体の用意

手順2 シーン切り替えを行うクラスを作る シーンの基底クラスをメンバ変数にもつ 全てのシーンの継承元のクラス

このint関数の数値でcaseの部分の処理を行う 手順3 シーン切り替えを行う関数 switch文を使う このint関数の数値でcaseの部分の処理を行う 次のシーンに切り替わる

切り替えイメージ このようにシーンは切り替えられます。 now_Scene->Scequence()が2をreturnした 関数の説明 この関数はint型の関数で returnされる値によって この関数自体の値が変わる。 関数内で実際の各シーンの 処理が行われている。 ゲーム画面 タイトル オプション このようにシーンは切り替えられます。 このスライドはアニメーションします。

モンパンの作られ方まとめ 列挙体を使う シーン切り替えクラス switch文 int型の関数 シーン切り替えを行ってくれる 関数をwhileの中に入れることで モンパンは動いておるのじゃ!

ちょっとコアなお話

Kinectについて モンパンで使っているKinectの機能 ビデオカメラ 深度値カメラ スケルトントラッキング キネクトのアングル操作 撮影している映像 深度値カメラ 赤外線による奥行情報の取得 スケルトントラッキング 関節の位置情報を取得してくれる。 キネクトのアングル操作 アングルを水平から上27°下27°変更可能

Kinectによる撮影 ビデオカメラ FKとの組み合わせ 撮影している映像を描画 奥行情報によるプレイヤー部分の検出 プレイヤーの部分だけを描画することが可能

スケルトントラッキングの利用 プレイヤーの手のモデル位置 プレイヤーの移動 パンチのジェスチャ 手、ひじ、肩の位置情報から相対値を利用 両足の位置情報を利用 パンチのジェスチャ 手、ひじ、肩の位置情報から角度を計算して利用 パンチ時のベクトルも算出

STLについて C++ 標準テンプレートライブラリ モンパンでの利用用途 動的な配列などを生成することが可能 vector、list、mapなどがある モンパンでの利用用途 敵モンスター数の変更 各シーンごとに敵の数を変更可能 SEデータの利用 enum型のIDの指定で読み込みも再生可能

CSVについて カンマ区切りのテキストファイル モンパンでの利用用途 マップデータ、シナリオデータ、パラメータ、 セーブデータと使い道はたくさん プログラム抜きで、マップ等の配置を変更可能 モンパンでの利用用途 各シーンの敵の種類、数、出現位置の決定 SEのファイル名データ

boostについて とにかく便利なものが多いライブラリ モンパンでの利用用途 デメリット 並列プログラミング 関数オブジェクト    などなど。。。 モンパンでの利用用途 CSVファイルの読み込みに利用 デメリット ライブラリ自体の容量がデカい コンパイルに時間がかかるようになる

トゥーンレンダリングについて シェーダプログラミングによって実装 2種類の輪郭線 アニメ調にシェーディングしている 法線による輪郭線 敵のモデル 裏ポリゴンを用いた輪郭線 ステージモデル

こういうのあると便利だよ!

ショートカットキー Shift + Altによる選択 F12 Ctrl + F3 Ctrl + H、 Ctrl + Shift + H 縦に列選択をすることができる F12 選択部分の定義へ飛べる Ctrl + F3 選択部分の次の出現箇所の検索 Ctrl + H、 Ctrl + Shift + H 検索と置換

継承図 継承などを図式化しておくとわかりやすい チーム内で共有できる

共有サービスの利用 データをメンバーで共有できるようにする サービス例 せかいじゅではDropboxを利用 Dropbox SkyDrive GitHub     などなど。。。 せかいじゅではDropboxを利用

まず一年半を振り返って

振り返り Skype便利は嘘 実際にコードを書こう 仕様は紙に書いてみる! CTCを使う 最近はほぼまったく使わない。 集まって作業しよう 図にしたりするとわかりやすい CTCを使う 三年生がいなくなったら積極的に!

その他のオススメ教えます!

おすすめします! ロベールのC++教室 ActiveScript入門Wiki 神・ゲームプログラミングの館 C++の絵本 http://www7b.biglobe.ne.jp/robe/cpphtml/ ActiveScript入門Wiki http://www40.atwiki.jp/spellbound/ 神・ゲームプログラミングの館 http://dixq.net/g/ C++の絵本 絵を用いてC++をわかりやすく解説してくれています。 プロになるためのゲームプラニングの教科書 企画書を書く時に参考になります。

ご清聴ありがとうございました。

質疑応答