Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "チームせかいじゅコードレビュー モンパン大解剖しちゃいます!."— Presentation transcript:

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

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

3 はじめに

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

5 モンパン大解剖!

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

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

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

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

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

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

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

13 継承にできること 同じ関数名で違う処理ができる。 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()の 中身の処理を行ってくれる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

28 手順1 列挙体の用意

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

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

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

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

33 ちょっとコアなお話

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

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

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

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

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

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

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

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

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

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

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

45 まず一年半を振り返って

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

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

48 おすすめします! ロベールのC++教室 ActiveScript入門Wiki 神・ゲームプログラミングの館 C++の絵本
ActiveScript入門Wiki 神・ゲームプログラミングの館 C++の絵本 絵を用いてC++をわかりやすく解説してくれています。 プロになるためのゲームプラニングの教科書 企画書を書く時に参考になります。

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

50 質疑応答


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

Similar presentations


Ads by Google