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

Slides:



Advertisements
Similar presentations
UGUI を 使ってみよう ( 導入・紹介?編 ) 1. uGUI とは O Unity 4.6 から使えるようになった UI (ユー ザーインターフェース)システム O 8 月: Unity4.6 β uGUI 試用版公開 O 11 月: Unity4.6 uGUI 正式版公開 正式版公開で、 機能紹介ブロ.
Advertisements

プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作 第4回 マルチスレッドとネットワーク. 今日の内容 マルチスレッド – ローディングの進捗表示とか – 処理高速化も見込めます ネットワーク通信 – 必然的にマルチスレッドを扱います.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
プログラミング入門 ガイダンス.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
アルゴリズムとデータ構造 第2回 線形リスト(復習).
本日のスケジュール 14:45~15:30 テキストの講義 15:30~16:15 設計レビュー 16:15~16:30 休憩
Generic programming と STL
プログラマのレベルアップ.
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
第8回 プログラミングⅡ 第8回
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報科学1(G1) 2016年度.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
「C++言語」習得のための実践的研究 -「テンプレート」,「例外処理」,「実行時型情報」-
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
UMLとは           032234 田邊祐司.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
基礎プログラミング演習 第1回.
インタラクティブ・ゲーム制作 <プログラミングコース>
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
3D散歩ゲーム 08A2043 谷口盛海 種田研究室.
プログラミング 4 記憶の割り付け.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
データ構造とアルゴリズム論 終章 専門科目におけるプログラミング
インタラクティブ・ゲーム制作 <プログラミングコース>
平成30年度高知工科大学教職科目 微分方程式特論I 11 高知大学教育学部技術教育コース 北川 晃.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
プロジェクト演習Ⅱ インタラクティブゲーム制作
第2回課題 配布した通り.氏名・学生番号を忘れないこと.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
とにかくゲーム作ってみよう (0からのゲームプログラミング)
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
ソフトウェア工学 知能情報学部 新田直也.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
Boostのスマートなポインタを使ってみる
ガイダンス 電子計算機 電気工学科 山本昌志 1E
アルゴリズムとデータ構造1 2009年6月15日
高度プログラミング演習 (11).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
情報処理Ⅱ 2005年10月28日(金).
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
情報処理Ⅱ 2007年12月3日(月) その1.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
アルゴリズムとデータ構造 2010年6月17日
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
3.1 シューティングゲームの当たり判定 当たったら死亡.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
情報処理Ⅱ 小テスト 2005年2月1日(火).
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

その他言語の基本系 「C++クラス設計に関するノート」 – – 文法について理解できたら是非 ロベールが合わなかった人向け – 「目指せプログラマー!」 – 「猫でもわかるプログラミング」

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

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

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

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

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

Windows API系 「ToruのDirectXプログラミング講座」 – – DirectInputはここで学びました 「VC++小手先のテクニック集」 – – Windowsならでは細かい処理や設定など 「猫でもわかるプログラミング」も Windows固有の内容には強いです

OpenGL 「床井研究室」 – – うちの研究室でもお世話になっている人が多 い、OpenGLを使ったテクニックと実装例が 豊富な優良サイト 「WisdomSoft」 – – OpenGLだけでなく、Win32やDirectX、 C++基礎までも淡々とまとまっていてgood.

アルゴリズム・ゲームデザイン 「地球にやさしいアルゴリズム」 – – 言語の文法は分かるけど、使いこなしがイマ イチ…という人のトレーニングにおすすめ 「Gamers Resource」 – – ゲームデザインについての考察。プログラ マーもたまには読んでおくと良いやも

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

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

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