プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2

Slides:



Advertisements
Similar presentations
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
Advertisements

PowerPoint活用マニュアル スライドショーにせず、そのまま見てね。.
プログラミング基礎I(再) 山元進.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミング基礎I(再) 山元進.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
パスワードをつけよう! ~ワード・エクセル・一太郎 ・その他(アタッシェケース)~
第3回 スプライトと音楽 05A1030 佐々木和也.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
構造体.
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理 第13回.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
プログラミング演習3 第2回 GUIの復習.
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
プログラミング2 関数
プログラミング応用 printfと変数.
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
プログラミング 4 記憶の割り付け.
プロジェクト演習Ⅱ インタラクティブゲーム制作
第10章 これはかなり大変な事項!! ~ポインタ~
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
0.2 プロジェクトの準備 DXライブラリを使うための準備.
デジタル画像とC言語.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
プロジェクト演習Ⅱ インタラクティブゲーム制作
情報処理Ⅱ 第2回:2003年10月14日(火).
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
C言語 はじめに 2016年 吉田研究室.
第1章 いよいよプログラミング!! ~文章の表示 printf~
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
プログラミング 3 2 次元配列.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
本当は消去できていない!? ~データを完全消去する方法~
本当は消去できていない!? ~データを完全消去する方法~
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
第5回 プログラミングⅡ 第5回
情報処理 第13回.
標準入出力、変数、演算子、エスケープシーケンス
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プロジェクト演習Ⅱ インタラクティブゲーム制作
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
値渡しと参照渡しについて.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2 第11回 プログラミングサプリ 2次元と関数編

今日の内容 2次元画像の扱い方 関数(メソッド)の扱い方 画像を読み込んで表示 文字表示 ふよふよしたり動かしたり 画面エフェクトにも使うよ 関数の作り方・使い方 値の渡し方・受け取り方 別ファイルへの分け方

今週のプロジェクト 授業資料ページからダウンロードします 今週のFKUT更新情報 落としたZipファイルを解凍して、 出てきたフォルダを好きなところに配置 今週のFKUT更新情報 サウンド関係の処理に微修正 ウィンドウにフルスクリーン機能を追加

今日のサンプル 何かカメラの前に張り付いてます 画像だったり文字だったり 関数を使ったプログラムの例

説明するほどのこともないのですが 3Dにおける画像との付き合い方

画像データとは 言うまでもないですが、 色のついた点の集まり FKで扱える画像形式 ビットマップ(BMP) PNG JPEG(JPG) きれいだがでかい PNG きれいでコンパクト 透過処理もできる JPEG(JPG) きちゃないけど超コンパクト

表示するには fkut_SpriteModel 詳しくはお品書きを読んでね 色々お節介焼きな便利変数です 画像の表示を絶望的に簡単にできます FKUT/SpriteModel.h を参照 できることが書いてあります それに加えてModel系の命令も使えるよ

基本手順 fkut_SpriteModel型の変数を作る 表示させたい画像を読み込む ウィンドウにエントリーする fkut_SpriteModel spr; 表示させたい画像を読み込む spr.readPNG(“hoehoe.png”); readBMP/PNG/JPGを形式に合わせて使う ウィンドウにエントリーする window.entry(spr); 先にカメラの設定を済ませておくこと カメラを変更したら再エントリーすればOK

位置やサイズの調整 glMoveToやglTranslateなどが利用可能 画像の中心点がどこにくるかを指定 ただし、有効なのはX,Y座標値のみ 座標の軸の取り方にも注意(次スライド参照) setPositionLTで、画像の左上がどこにくるか基準での位置指定が可能 表示サイズは基本的に画像自体のサイズのままになる 変更したい場合はsetSpriteSizeを使う

座標系の注意 ウィンドウが800x600の場合 (-400,300) (0,0) (400,-300)

文字表示の手順 文字データ(フォント)を読み込む 表示させたい文字をdrawTextで指定 数値の表示についてはサンプル参照 initFontを使う Vista,7の場合は「メイリオ」をおすすめ C:/Windows/fonts/Meiryo.ttc 表示させたい文字をdrawTextで指定 drawTextを呼ぶたびに文字が付け足される 改行したい場合は”\n”と書く 後で書き直すこともできる 数値の表示についてはサンプル参照 色の変更や細かい装飾はWeb上の資料を参照

3次元空間中に表示したい場合 SpriteModelは画面上に貼り付ける専門の変数なので、別の変数を用意する サンプル中に「背景に画像を敷く」コードがあるので、それを参考にして空間中に配置できる、はず エリアコメントを解除してみよう

Javaでも難しいとは思ったでしょうが 関数を使ってスマートに書こう

関数とは Javaで言うところの「メソッド」です 以下の3つの特徴を持ちます いくつかの処理を1つのカタマリにしておき、 必要に応じて呼び出せる。呼び出した処理が終わったら元の場所に戻ってくる。 呼び出す際に必要な値を引き渡せる。 要らなければ渡さなくてもいい。 戻ってくる際に計算結果を返すことができる。要らなければ返さなくてもいい。

Javaとの違い 大枠は似ているが、細かいお作法が違うので気をつけよう 枕詞「public」は要らない 「お品書き」と「関数本体」を分けて書く必要がある 厳密には必須じゃないけど、必須として覚えた方がよい 数値以外の変数を受けとる時は引数リストに「&」を付ける 詳細は後述

キーを押したら音がなる関数 今日のサンプルを参照 playSoundByKey()関数 関数は「関数名()」と表記することが多い ウィンドウの変数、判定するキーの種類、鳴らしたいSEの変数、再生フラグ変数を引数として渡している

お品書きと本体 関数を作る時の 返値の種類 関数名(引数リスト); の部分をこの授業ではお品書きと呼ぶ 関数を作る時の 返値の種類 関数名(引数リスト); の部分をこの授業ではお品書きと呼ぶ 正確には「プロトタイプ宣言」と呼ぶ プログラムの先頭(main()より前、#includeより後)にお品書きを書く その後ろにお品書きと本体を書くようにする

でもそうやっていくと 1つのファイルが膨れあがっていく お品書き、本体と、その関数を使いたいファイルは別々にすることができる プロジェクトを右クリック→追加→新しい項目、で以下の種類のファイルを追加 ヘッダーファイル(.h) お品書きを書くファイル C++ファイル(.cpp) 関数本体を書くファイル ファイル名は何でも良い hとcppの対応は分かるようにした方がいい

インクルードとは 使いたい関数(やその他もろもろ)のヘッダーファイル(お品書き)を取り込む命令 FKUTの機能もインクルードすることで 使えるようになっている 動作としては、ファイルに書かれている内容をその場にコピペするのと大差ない なので、プロトタイプ宣言を直書きしても、ヘッダーをインクルードしても動作は一緒

ゲームでよく使う関数の作り方 返値は要らない場合が多い 引数は「参照渡し」にした方がよい 座標や数値の計算をしたい場合は返値を返すように作るとよい int, doubleの他に、bool, fk_Vectorなどが返値としてよく用いられる 引数は「参照渡し」にした方がよい 引数リストで受け取る変数名の前に「&」を付ける fkut系の変数は必須 fk系も基本的に参照渡しの方が問題が起きない

値渡しと参照渡しの違い 値渡し(通常)の関数 参照渡しの関数 void func(int iA) { iA *= 2; } // 以下main内だとする int iValue = 10; func(iValue); // ここでのiValueの値は? void func(int &iA) { iA *= 2; } // 以下main内だとする int iValue = 10; func(iValue); // ここでのiValueの値は?

違いのまとめ 値渡しだと、引数として「同じ値がコピーされる」ので、関数側でいじってもコピー元には影響がない 参照渡しだと、引数として「その変数の箱自体が渡される」ので、関数側でいじった結果が反映される 多くの場合はこっちの挙動の方がうれしい だが、変数ではなく値を直書きしているものは受け取れない キーの種類が参照渡しじゃないのはそのため 引数を意図せずにいじって混乱することもある

その他注意点 Javaと混乱しないように! 配列を渡したい場合の引数リスト SpecialKeyのコード 普通のキーコード 文字列を渡したい Javaで習っている引数はint, doubleについては「値渡し」です 配列については「参照渡し」になっています これはC++でもそう Javaには&を付ければ参照渡し、という機能はありません 配列を渡したい場合の引数リスト int [] iArray fk_Model [] mArray SpecialKeyのコード fk_SpecialKey spKey 普通のキーコード char key 文字列を渡したい string text

より詳しい人のために 構造体やクラスの利用は推奨します グローバル変数の利用は極力避けるべし ただし、ある程度独学で頑張れるチームのみ 分かってる人だけが使うのではなく、チーム全体で出来るだけ理解レベルを統一して開発にあたりましょう グローバル変数の利用は極力避けるべし トラブルのもとです ゲームを通じて必要な変数はmain関数に作り、面倒でも引数でしっかり渡すように