ゲームオブジェクトの話
本間翔太
今日の目的こんな土台作りあるよ !!
独学、いつやるの?今でしょ!
部長の試行錯誤を紹介
目次• 自己紹介• 時系列順に各ゲームの作り方!• 土台を作るメリット• 注意すべき所• まとめ ( 色々やってみて分かった事 )
• 本とサイトの紹介
こんな人
• 萌えが好きで中二病な21歳• C++ と C# をよく使う、主にコードを書く人• ゲーム作ってる気がする• 部長• ミクちゃん天使過ぎるだろ…• ブログやってます!「マジカル
BrainOok!Misa」
時系列順に各ゲームの作り方!
作った時の状況とか知識とか内部の説明良い所と悪い所学んだこと ~ 失敗と対策 ~読んだ書籍
1つ目のゲーム
•学年: 2 年生•人数: 3 人•言語: C 言語
1. 作った時に知ってた事• 構造体分かった気がする。• ポインタ美味しいらしい。• C 言語と C++ って何がどう違うわけ?• DirectX に初挑戦
2. 内部の説明● シーン管理
グローバルの管理用変数を変更するとシーンが変更される !!
2. 内部の説明● オブジェクト管理
・複数いる場合は 配列に入れる
・全てグローバル変数
3. 良い所と悪い所● 良い所
•シンプルで分かりやすい。•何処からでも変数を弄れてる。
3. 良い所と悪い所● 悪い所
•何処からでも変数を弄れてる。
学んだこと ~ 失敗と対策 ~
• 失敗:グローバル変数ヤバイ… ( スパゲッティコード )
– 対策:良いコード書こう…そうだ C++ だ !!
• 失敗:分かりにくいコード ( スパゲッティコード )
– 対策:良いコード書こう…そうだ C++ だ !!
• 失敗:後半に制作速度が上がらなかった ( スパ(ry))
– 対策:良いコード書こう…そうだ C++ だ !!
5. 読んだ書籍
• C の絵本
2 つ目のゲーム
•学年: 2 年生•人数: 1 人•言語: C++
1. 作った時に知ってた事• C 言語は大体分かった気がする• C++ に初挑戦• 構造体の強化版があるらしい• C++ 使えば凄い事出来るんでしょ?• 卒業生のコードを見て首を傾げてた
2. 内部の説明● シーン管理
グローバルの管理用変数を変更するとシーンが変更される !!
2. 内部の説明● オブジェクト管理
・複数いる場合は 配列に入れる
・クラス内部の public 変数
3. 良い所と悪い所● 良い所
• C++ カッコイイ…勉強したわ…•クラス使ってるし分かりやすい
3. 良い所と悪い所● 悪い所
• C++ で書いているだけでほぼ C 言語•むしろ複雑になって書く量が増えてる•手動で書かないといけない部分が多い
学んだこと ~ 失敗と対策 ~
• 失敗: C++ に夢を見過ぎた。光じゃなく闇だった。– 対策: C++ とプログラムの組み方について勉強し
よう…
• 失敗: C++ の記法が分かるのとオブジェクト指向分かるのは違う– 対策: C++ とプログラムの組み方について勉強し
よう…
5. 読んだ書籍
• オブジェクト指向でなぜつくるのか• やさしい C++• 憂鬱なプログラマのためのオブジェクト指向開発講座• 独習 C++• C++ の絵本
3 つ目のゲーム
•学年: 3 年生•人数: 6 人•言語: C#
1. 作った時に知ってた事• C++ 分かれば C# 分かる• C# とか使ったことないから一から勉強し
た• シーン管理について勉強した• オブジェクト指向について勉強した• ジェネリッククラスについて勉強した
2. 内部の説明● シーン管理
シーン毎に分割する。現在のシーンだけを保持しておけばOK
イメージ
現在のシーン
タイトル
メインゲーム
ゲームオーバー
ゲームクリア
シーン基礎
シーン群
タイトル
メインゲーム
ゲームクリア
ゲームオーバー
更新
描画
2. 内部の説明● オブジェクト管理
・一つの配列で 全オブジェクトを管理する
イメージ
Player Enemy Item StageObject
Slime Drakee
Coin Potion
Portal Poison
オブジェクト用配列
Object
Player
SlimeSlime DrakeeDrakee
Potion
Poison
Player : 1Slime : 3Drakee : 2Potion : 1Poison : 1
Slime
更新 描画
3. 良い所と悪い所● 良い所• 追加すればなんか動く• シーン毎に区切られてるので分業が楽
3. 良い所と悪い所● 悪い所
• 配列にオブジェクトを追加した段階でそのオブジェクトを要素番号から特定するのが困難
学んだこと ~ 失敗と対策 ~
• 失敗:用途が曖昧なクラスを作ると、思わぬ機能が追加される– 対策:出来るだけ用途が明確なクラスを作ろう
• 失敗:ローディング中に変なことするとヤバイ– 対策:複数スレッドある場合きちんと区分けする
5. 読んだ書籍
• 独習 C#• デザインパターンワークブック• ゲームプログラマになるために覚えておきたい技術
4 つ目のゲーム
•学年: 4 年生•人数: 9 人•言語: C++
1. 作った時に知ってた事• STL(vector,list,map,set)• Boost C++ ライブラリを少し• デザインパターンを少し
2. 内部の説明● シーン管理
シーン管理は前回と同じ!
2. 内部の説明● オブジェクト管理
・ノード管理始めました !!・レイヤー構造にもなった !!
イメージ
Root
A B
C D
E
F
H
I
J
G
K
Root.AttachObject(A);
Root.AttachObject(B);B.AttachObject(C); C.AttachObject(E);C.AttachObject(L);C.AttachObject(M);B.AttachObject(D);
Root.AttachObject(F);F.AttachObject(G);G.AttachObject(K);F.AttachObject(H);H.AttachObject(I);I.AttachObject(J);
L M
N
O
更新
Player Enemy Item StageObject
Pig Drakee
Candy Potion
Gate Poison
NodeObject
Player
DrakeeRedPig
Heart
EventZone
Root
SlimePigPig
CandyCandy
追加すると勝手に更新と描画がされるRoot.AttachObject(player);Root.AttachObject(pig1);Root.AttachObject(pig2);Root.AttachObject(pig3);Root.AttachObject(candy1);Root.AttachObject(candy2);
クラス群
Root
レイヤー始めました!!
GameLayerOptionLayer
PlayerSlimeSlimePig
CoinCoinCandy
Gate
更新のみ停止
MenuButton
CutScene
更新と描画を停止
シーン: メインゲーム
3. 良い所と悪い所● 良い所• 追加すればなんか動く• 停止出来る機構が最初から用意されている• アクセス違反を若干回避出来る
3. 良い所と悪い所● 悪い所• 最初に理解しづらい• まだアクセス違反を回避しきれてない
学んだこと ~ 失敗と対策 ~
• 失敗:当初、処理効率をあまり考えてなかった– 対策:正しく STL を選択するための知識
• 失敗:例外処理の重要性に気づいてなかった– 対策:途中から追加しだした
5. 読んだ書籍
• ゲームコーディングコンプリート• Effective C++
土台を作るメリット
土台を作るメリット
時間の短縮が出来る! ( )※
比較的簡単にゲームが作れる! ( )※
体系化する事で、混沌が少し和らぐ ( )※
注意すべき所
ゲームを作りながら土台を作って行こう
自分も使う人も勉強が必要になる
目的と期限を決めよう
まとめ
まとめ
独学 ( 自習 ) が必須!周りを巻き込もう!
大丈夫そうだ!勉強でかなりいけるぞ!
ゲームを作る事が最重要目的
ゲームサークル夏以降の予定
本とサイトの紹介
本• 2ch Books Program – http://bit.ly/138JjkW
• ゲームプログラマになる前に (ry– http://amzn.to/1dRedDt
• デザインパターンワークブック– http://amzn.to/18zGq4C
• やさしい C++– http://amzn.to/1dRfbj5
サイト• ゲームつくろー!– http://bit.ly/89ondq
• 全ゲ連 - 発表資料置き場– http://p.tl/Wbzn
• Let’s Boost– http://p.tl/3hXo
このスライドはピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター
「初音ミク」を利用しています。