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

28
プププププププププププププププププププププ 最最最 最最最最最最最最 Boost 最最

Upload: huy

Post on 24-Feb-2016

41 views

Category:

Documents


0 download

DESCRIPTION

プロジェクト演習 Ⅳ インタラクティブゲーム制作. 最終 回 関数を持ち歩こう ~ Boost 入門~. 今日のメインディッシュ. 関数を持ち歩く方法を覚えよう クラス の 設計 相談でも、あるクラスから 別のクラスが見えない、という声が多い 関数単位 で持ち運べたら便利かも? 関数ポインタから関数オブジェクトまで C 言語レベルでは「関数ポインタ」という 概念がこれを実現できる C++ になると話が複雑になるので、 Boost を使って「関数オブジェクト」を利用する. おさらい. ポインタのメリット スコープを飛び越えて変数やオブジェクトを使い回せる - PowerPoint PPT Presentation

TRANSCRIPT

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

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

最終回関数を持ち歩こう~ Boost 入門~

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

今日のメインディッシュ

• 関数を持ち歩く方法を覚えよう–クラスの設計相談でも、あるクラスから

別のクラスが見えない、という声が多い–関数単位で持ち運べたら便利かも?

• 関数ポインタから関数オブジェクトまで– C 言語レベルでは「関数ポインタ」という

概念がこれを実現できる– C++ になると話が複雑になるので、 Boost

を使って「関数オブジェクト」を利用する

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

おさらい

• ポインタのメリット– スコープを飛び越えて変

数やオブジェクトを使い回せる

– 複数の変数が存在する時に、わざわざ処理を書き分けなくても、ポインタが指し示す対象を切り替えれば、同じコードで処理が済む• → こんな感じ

string str1 = “hogehoge”;string str2 = “hugehuge”;

string *p_str = &str1;

// 状況に応じてポインタを更新if() { p_str = &str2;}

// p_str が指している対象を処理cout << (*p_str) << endl;

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

関数ポインタを使ってみる

• 同じ事が関数で出来たら便利なんじゃなかろうか?– 複数の関数が存在する

時に、わざわざ処理を書き分けなくても、関数ポインタが指し示す対象を切り替えれば同じコードで処理が済ませられる• → こんな感じ

void func1();void func2();

// ある関数内にてvoid (*fpFunc)(void) = func1;

// 条件次第で参照先の変更if() { fpFunc = func2;}

// 関数ポインタ経由で呼び出しfpFunc();

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

しかしこれには問題が

• 関数ポインタは C 言語の機能なので、

クラスのメンバ関数に対応していない

• 厳密には static メンバなら大丈夫なのだが、このご時世にこれは致命的

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

何故かというと

• メンバ関数呼び出しには、必ず「どのインスタンスに対する呼び出しなのか」が必要– instance.func() か pointer->func()

• クラス内で自分のメンバを呼ぶのも、暗黙の内に this->func() と解釈される

• 関数ポインタは引数をセットにできない

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

そこで関数オブジェクト

• C++ では関数ポインタを拡張した、メンバ関数ポインタなるものが存在する–だが記号の扱いとかがややこしくて面倒

• ここでは Boost ライブラリの bind とfunction という機能を使ってみよう– Boost で提供されるこれらの機能を使って

「関数オブジェクト」として扱う

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

更に発展させて

• 関数オブジェクトを利用して、以前に紹介したタスクシステムに相当するものを作れる–共通の基底クラスをどうこうする必要がない

• signal/slot という機能を使う–タスクシステムに限らず、あるイベントが

発生した際に関連する関数を一斉に呼びたい、なんて時にも便利

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

おまけ

• これさえ出来れば優秀なゲームプログラマになれること間違いなし!の極意

• 間違いないっす、やばいっす

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

それは…

自分で問題を発見して解決するための技術

ggrks

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

半分冗談で、半分本気です

• 何故ならこの授業の目的は「自律思考可動型電算遊戯構築者育成」だから–全部誰かから教わったことだけでゲームが作

れると思ったら大間違いである!

• でも調べろって言われたって、どう調べればいいのか分からないんだよ!–それを今日は伝授します

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

知識・技術のレイヤーを考える

• まず、作ろうとしているものにどんな技術が必要かを見定める

• それを構築するには何を使えばいいのか– ライブラリの選定、 API リファレンス参照

• どのように組めばいいのか– サンプルコード、デザインパターン、設計論

• どのように書けばいいのか– 言語の文法、概念など

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

世に出回っている知識の傾向

• それを構築するには何を使えばいいのか–Web や本でもよく転がっている–数には困らないが、質はピンキリ

• どのように組めばいいのか–一番分かりづらく、伝えにくい部分–授業で重視したいのはここ

• どのように書けばいいのか–一番の根っこの部分–ここは独学独習を強く推奨

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

今回のネタ

• 私のブックマークからゲーム制作技術に関するサイトをピックアップして紹介

• 一気に全部を理解しようとしなくていい–いわゆる RPG で「全部の宝箱を開けないと

気が済まない人」は注意してください

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

C++ の文法・概念編

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

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

STL の使い方

• 「 C++ STL 」でググれ!–いつも vector配列をメインに使っているが、

それ以外にも便利なものが色々ある–私も使い方をど忘れしたときはよく調べます–うちの研究室の資料もどうぞ

• http://www.teu.ac.jp/aqua/GS/text/PDF/Container.pdf

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

その他言語の基本系

• 「 C++ クラス設計に関するノート」– 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/

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

言語を学習する際の地図(特に C++ の場合 )

• 言語のコア機能– いわゆる「文法」– C++ の場合はクラス

やテンプレートなどが目玉機能になる

• 標準ライブラリ– C の標準関数群– C++ のテンプレート

を利用したライブラリ(STL)

• 拡張ライブラリ– Boost

• C++ 次期標準機能– Win32SDK, Cocoa

• プラットフォーム API– DirectX, OpenGL

• 描画 API– DXLib, FK

• ラッパーライブラリ

– デバイス系の SDK など

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

今日のおすすめ

• 「 Let’s Boost 」– http://www.kmonos.net/alang/boost/– Boost の使い方を学ぶならまずここ• 日本語だしね!

–文字列をカンマ区切りにばらす、などの処理もクールに実現できる• ただし、 C++ の言語機能をちょっとディープに

理解していないときついかも

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

近年充実してきたインデックス

• 「全日本学生ゲーム開発者連合 (全ゲ連 ) 」– http://d.hatena.ne.jp/zengeren/

–学生連合と言いつつ、結構色んな会社の中の人が講演に出たりしていてゴージャス

–同人サークルも多く、実戦的な内容も多い

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

定番どころ

• 「マルペケつくろーどっとコム」– http://marupeke296.com/–このサイトがあれば私は要らない!かも– C++文法の基礎知識は”前提”になっている–要素技術と、そのサンプル、設計論にまで踏

み込んでいるので非常に有用–著者のレベルアップにより、内容がどんどん高度で複雑になっているので注意

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

要素技術のフォローアップ

• アニメーションの原理、 3 次元回転概論–「 TMPSwiki 」• http://www.tmps.org/index.php?TMPSwiki• 「 3D空間における回転の表現形式」は必読!

• ネットワーク通信–「 Geek なぺーじ –winsock プログラミン

グ」• http://www.geekpage.jp/programming/winsock/• 私が通信処理を学んだのはここ

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

Windows API系• 「 Toru の DirectX プログラミング講座」– http://toruweb.web.fc2.com/index.html– DirectInput はここで学びました

• 「 VC++小手先のテクニック集」– http://www.alpha-net.ne.jp/users2/uk413/vc/index.html–Windows ならでは細かい処理や設定など

• 「猫でもわかるプログラミング」もWindows固有の内容には強いです

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

OpenGL• 「床井研究室」– http://marina.sys.wakayama-u.ac.jp/~tokoi/–うちの研究室でもお世話になっている人が多

い、 OpenGL を使ったテクニックと実装例が豊富な優良サイト

• 「 WisdomSoft 」– http://wisdom.sakura.ne.jp/– OpenGL だけでなく、 Win32 や DirectX 、

C++ 基礎までも淡々とまとまっていてgood.

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

アルゴリズム・ゲームデザイン

• 「地球にやさしいアルゴリズム」– http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop

–言語の文法は分かるけど、使いこなしがイマイチ…という人のトレーニングにおすすめ

• 「 Gamers Resource 」– http://iwatam-server.sakura.ne.jp/game/index.html–ゲームデザインについての考察。プログラ

マーもたまには読んでおくと良いやも

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

私が研究中にお世話になった所

• 筑波大学の藤澤先生の wiki– http://www.slis.tsukuba.ac.jp/~

fujis/cgi-bin/wiki/index.php?FrontPage

–プログラミングに関わる有用な Tips が豊富–研究レベルで役に立つような内容なので

ちょっと早いかもしれないが、ブクマ推奨

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

もう一度注意

• 「 RPG で全部の宝箱を開けないと気が済まない人」は気をつけること!

• 最初から全部のアイテム、全部の魔法が使えるゲームはそうそうない–あったらあったでどういうゲームデザインか

気になりますが• 最低限の言語基礎力があれば、後は必要

に応じて参照すればどうとでもなる!

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

期末課題について

• 以下のものを 2/8(金 )正午までに提出– [ 必須 ]チームで開発している現状のプロ

ジェクトデータ (ビルドが通るもの )• ゲーム本体以外にも開発したものがあれば一緒に

– [選択 ] 授業の中で学んだ要素を活かして制作したプログラム• エフェクト・シェーダ・ AI• その他独学で得た技術を盛り込んでも可