Presentation is loading. Please wait.

Presentation is loading. Please wait.

プロジェクト演習Ⅳ インタラクティブゲーム制作 最終回 関数を持ち歩こう ~Boost入門~. 今日のメインディッシュ 関数を持ち歩く方法を覚えよう – クラスの設計相談でも、あるクラスから 別のクラスが見えない、という声が多い – 関数単位で持ち運べたら便利かも? 関数ポインタから関数オブジェクトまで.

Similar presentations


Presentation on theme: "プロジェクト演習Ⅳ インタラクティブゲーム制作 最終回 関数を持ち歩こう ~Boost入門~. 今日のメインディッシュ 関数を持ち歩く方法を覚えよう – クラスの設計相談でも、あるクラスから 別のクラスが見えない、という声が多い – 関数単位で持ち運べたら便利かも? 関数ポインタから関数オブジェクトまで."— Presentation transcript:

1 プロジェクト演習Ⅳ インタラクティブゲーム制作 最終回 関数を持ち歩こう ~Boost入門~

2 今日のメインディッシュ 関数を持ち歩く方法を覚えよう – クラスの設計相談でも、あるクラスから 別のクラスが見えない、という声が多い – 関数単位で持ち運べたら便利かも? 関数ポインタから関数オブジェクトまで – C言語レベルでは「関数ポインタ」という 概念がこれを実現できる – C++になると話が複雑になるので、Boostを 使って「関数オブジェクト」を利用する

3 おさらい ポインタのメリット – スコープを飛び越えて 変数やオブジェクトを 使い回せる – 複数の変数が存在する 時に、わざわざ処理を 書き分けなくても、ポ インタが指し示す対象 を切り替えれば、同じ コードで処理が済む →こんな感じ string str1 = “hogehoge”; string str2 = “hugehuge”; string *p_str = &str1; // 状況に応じてポインタを更新 if() { p_str = &str2; } // p_str が指している対象を処理 cout << (*p_str) << endl;

4 関数ポインタを使ってみる 同じ事が関数で出来 たら便利なんじゃな かろうか? – 複数の関数が存在する 時に、わざわざ処理を 書き分けなくても、 関数ポインタが指し示 す対象を切り替えれば 同じコードで処理が済 ませられる →こんな感じ void func1(); void func2(); // ある関数内にて void (*fpFunc)(void) = func1; // 条件次第で参照先の変更 if() { fpFunc = func2; } // 関数ポインタ経由で呼び出し fpFunc();

5 しかしこれには問題が 関数ポインタはC言語の機能なので、 クラスのメンバ関数に 対応していない 厳密にはstaticメンバなら大丈夫なのだが、 このご時世にこれは致命的

6 何故かというと メンバ関数呼び出しには、必ず「どのイ ンスタンスに対する呼び出しなのか」が 必要 – instance.func() か pointer->func() クラス内で自分のメンバを呼ぶのも、 暗黙の内に this->func() と解釈される 関数ポインタは引数をセットにできない

7 そこで関数オブジェクト C++では関数ポインタを拡張した、 メンバ関数ポインタなるものが存在する – だが記号の扱いとかがややこしくて面倒 ここではBoostライブラリのbindと functionという機能を使ってみよう – Boostで提供されるこれらの機能を使って 「関数オブジェクト」として扱う

8 更に発展させて 関数オブジェクトを利用して、以前に 紹介したタスクシステムに相当するもの を作れる – 共通の基底クラスをどうこうする必要がない signal/slotという機能を使う – タスクシステムに限らず、あるイベントが 発生した際に関連する関数を一斉に呼びたい、 なんて時にも便利

9 おまけ これさえ出来れば優秀なゲームプログラ マになれること間違いなし!の極意 間違いないっす、やばいっす

10 それは… 自分で問題を発見して 解決するための技術 ggrks

11 半分冗談で、半分本気です 何故ならこの授業の目的は「自律思考可 動型電算遊戯構築者育成」だから – 全部誰かから教わったことだけでゲームが作 れると思ったら大間違いである! でも調べろって言われたって、どう調べ ればいいのか分からないんだよ! – それを今日は伝授します

12 知識・技術のレイヤーを考える まず、作ろうとしているものにどんな技術が 必要かを見定める それを構築するには何を使えばいいのか – ライブラリの選定、APIリファレンス参照 どのように組めばいいのか – サンプルコード、デザインパターン、設計論 どのように書けばいいのか – 言語の文法、概念など

13 世に出回っている知識の傾向 それを構築するには何を使えばいいのか – Webや本でもよく転がっている – 数には困らないが、質はピンキリ どのように組めばいいのか – 一番分かりづらく、伝えにくい部分 – 授業で重視したいのはここ どのように書けばいいのか – 一番の根っこの部分 – ここは独学独習を強く推奨

14 今回のネタ 私のブックマークからゲーム制作技術に 関するサイトをピックアップして紹介 一気に全部を理解しようとしなくていい – いわゆるRPGで「全部の宝箱を開けないと気 が済まない人」は注意してください

15 C++の文法・概念編 「ロベールのC++教室」 – http://www7b.biglobe.ne.jp/robe/cpphtml/ http://www7b.biglobe.ne.jp/robe/cpphtml/ – 基本的な文法や概念はここでだいたい揃う – 1部の内容は必須 – 2部も網羅しておきたい テンプレートに関しては後回しでもよい 4部でSTLの使い方だけ触れているのでそちらを

16 STLの使い方 「C++ STL」でググれ! – いつもvector配列をメインに使っているが、 それ以外にも便利なものが色々ある – 私も使い方をど忘れしたときはよく調べます – うちの研究室の資料もどうぞ http://www.teu.ac.jp/aqua/GS/text/PDF/Container.pdf

17 その他言語の基本系 「C++クラス設計に関するノート」 – http://www.ogis-ri.co.jp/otc/hiroba/technical/CppDesignNote/ http://www.ogis-ri.co.jp/otc/hiroba/technical/CppDesignNote/ – 文法について理解できたら是非 ロベールが合わなかった人向け – 「目指せプログラマー!」 http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html – 「猫でもわかるプログラミング」 http://homepage2.nifty.com/c_lang/

18 言語を学習する際の地図 (特にC++の場合) 言語のコア機能 – いわゆる「文法」 – C++の場合はクラスや テンプレートなどが 目玉機能になる 標準ライブラリ – Cの標準関数群 – C++のテンプレートを 利用したライブラリ (STL) 拡張ライブラリ – Boost C++ 次期標準機能 – Win32SDK, Cocoa プラットフォーム API – DirectX, OpenGL 描画 API – DXLib, FK ラッパーライブラリ – デバイス系の SDK など

19 今日のおすすめ 「Let’s Boost」 – http://www.kmonos.net/alang/boost/ http://www.kmonos.net/alang/boost/ – Boostの使い方を学ぶならまずここ 日本語だしね! – 文字列をカンマ区切りにばらす、 などの処理もクールに実現できる ただし、C++の言語機能をちょっとディープに 理解していないときついかも

20 近年充実してきたインデックス 「全日本学生ゲーム開発者連合(全ゲ連)」 – http://d.hatena.ne.jp/zengeren/ http://d.hatena.ne.jp/zengeren/ – 学生連合と言いつつ、結構色んな会社の中の 人が講演に出たりしていてゴージャス – 同人サークルも多く、実戦的な内容も多い

21 定番どころ 「マルペケつくろーどっとコム」 – http://marupeke296.com/ http://marupeke296.com/ – このサイトがあれば私は要らない!かも – C++文法の基礎知識は”前提”になっている – 要素技術と、そのサンプル、設計論にまで踏 み込んでいるので非常に有用 – 著者のレベルアップにより、内容がどんどん 高度で複雑になっているので注意

22 要素技術のフォローアップ アニメーションの原理、3次元回転概論 – 「TMPSwiki」 http://www.tmps.org/index.php?TMPSwiki 「3D空間における回転の表現形式」は必読!3D空間における回転の表現形式 ネットワーク通信 – 「Geekなぺーじ –winsockプログラミング」 http://www.geekpage.jp/programming/winsock/ 私が通信処理を学んだのはここ

23 Windows API系 「ToruのDirectXプログラミング講座」 – http://toruweb.web.fc2.com/index.html http://toruweb.web.fc2.com/index.html – DirectInputはここで学びました 「VC++小手先のテクニック集」 – http://www.alpha-net.ne.jp/users2/uk413/vc/index.html http://www.alpha-net.ne.jp/users2/uk413/vc/index.html – Windowsならでは細かい処理や設定など 「猫でもわかるプログラミング」も Windows固有の内容には強いです

24 OpenGL 「床井研究室」 – http://marina.sys.wakayama-u.ac.jp/~tokoi/ http://marina.sys.wakayama-u.ac.jp/~tokoi/ – うちの研究室でもお世話になっている人が多 い、OpenGLを使ったテクニックと実装例が 豊富な優良サイト 「WisdomSoft」 – http://wisdom.sakura.ne.jp/ http://wisdom.sakura.ne.jp/ – OpenGLだけでなく、Win32やDirectX、 C++基礎までも淡々とまとまっていてgood.

25 アルゴリズム・ゲームデザイン 「地球にやさしいアルゴリズム」 – http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop – 言語の文法は分かるけど、使いこなしがイマ イチ…という人のトレーニングにおすすめ 「Gamers Resource」 – http://iwatam-server.sakura.ne.jp/game/index.html http://iwatam-server.sakura.ne.jp/game/index.html – ゲームデザインについての考察。プログラ マーもたまには読んでおくと良いやも

26 私が研究中にお世話になった所 筑波大学の藤澤先生のwiki – http://www.slis.tsukuba.ac.jp/~fujis/cgi- bin/wiki/index.php?FrontPage http://www.slis.tsukuba.ac.jp/~fujis/cgi- bin/wiki/index.php?FrontPage – プログラミングに関わる有用なTipsが豊富 – 研究レベルで役に立つような内容なので ちょっと早いかもしれないが、ブクマ推奨

27 もう一度注意 「RPGで全部の宝箱を開けないと気が済 まない人」は気をつけること! 最初から全部のアイテム、全部の魔法が 使えるゲームはそうそうない – あったらあったでどういうゲームデザインか 気になりますが 最低限の言語基礎力があれば、後は必要 に応じて参照すればどうとでもなる!

28 期末課題について 以下のものを2/8(金)正午までに提出 – [必須]チームで開発している現状のプロジェ クトデータ(ビルドが通るもの) ゲーム本体以外にも開発したものがあれば一緒に – [選択]授業の中で学んだ要素を活かして制作 したプログラム エフェクト・シェーダ・AI その他独学で得た技術を盛り込んでも可


Download ppt "プロジェクト演習Ⅳ インタラクティブゲーム制作 最終回 関数を持ち歩こう ~Boost入門~. 今日のメインディッシュ 関数を持ち歩く方法を覚えよう – クラスの設計相談でも、あるクラスから 別のクラスが見えない、という声が多い – 関数単位で持ち運べたら便利かも? 関数ポインタから関数オブジェクトまで."

Similar presentations


Ads by Google