3.1 シューティングゲームの当たり判定 当たったら死亡.

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
ブロック運びゲーム.
班紹介 描画班一同.
第13回構造体.
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
Javaでゲーム  山本拓弥.
16.3 関数と構造体 構造体ポインタ 地底探査ゲーム
基礎プログラミングおよび演習 第8回.
第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元)
構造体.
演習12.
プログラミングIII演習 第1回目.
INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
プログラミング 3 構造体(1).
CGと形状モデリング 授業資料 長井 超慧(東京大学)
C 言語について 補足資料 資料および授業の情報は :
C言語を用いたシューティング ゲームの作成
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第2回 グラフィックスを使っての演習 グラフを描こう.
DirectX勉強会 第5回.
マルチスレッド処理 マルチプロセス処理について
シューティングゲーム.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング 3 構造体(2).
ゲームプログラミング講習  第3章 ゲーム作成 ブロック崩しを作ります ゲームプログラミング講習 第3章 ゲーム作成.
0.2 プロジェクトの準備 DXライブラリを使うための準備.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
関数への道.
シューティングゲームにおける 未経験者と経験者の差異の解析
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
構造体と共用体.
卒研1 第1回資料 OpenCVを用いた画像処理
オブジェクト指向プログラミング クラス 継承
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
C#プログラミング実習 第3回.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
第6回:得点を表示しよう! (文字の表示、乱数)
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
ソフトウェア工学 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
:: の扱い 長谷川啓.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座第5回 2017 構造体.
0.1 DXライブラリの導入 必要なファイルの準備.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
プログラミング 2 静的変数.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
Presentation transcript:

3.1 シューティングゲームの当たり判定 当たったら死亡

当たり判定とは ゲーム上の物体同士が衝突しているかの判定 自機に弾が当たったかどうか 敵機に弾が当たったかどうか 自機が地面に接しているかどうか 自機とアイテムが重なっているかどうか などの判定のこと 3.1 シューティングゲームの当たり判定

どうやって判定するのか ほとんどの場合、図形を用いて判定する 図形以外の方法も存在するが、紹介はまた今度 実際に描画するのではなく、裏で計算するだけ 図形以外の方法も存在するが、紹介はまた今度 3.1 シューティングゲームの当たり判定

今回作る当たり判定 今回はシューティングゲームの当たり判定 円×円の当たり判定がよく用いられる 重なっているので 当たり 3.1 シューティングゲームの当たり判定

なぜ円×円を使うのか 弾の画像には長方形の方がフィットする でも回転したら? 回転するほどズレる 回転してもズレない ※回転した長方形の判定は大変 回転してもズレない 3.1 シューティングゲームの当たり判定

当たり判定構造体の設計 平面上に円を定義するのに必要な変数は・・・ 構造体に必要な関数は・・・ こうなる 座標 半径 当たり判定の実行 struct COLLISION POINT location bool isHit(COLLISION) double radius こうなる 3.1 シューティングゲームの当たり判定

判定関数の実装 2つの円が重なっているかどうか調べるには? ピタゴラスの定理を使おう 緑の線分 < 半径の和 なら重なっている location.y - 相手.location.y location.x - 相手.location.x 3.1 シューティングゲームの当たり判定

判定関数の実装 実際に書くとこうなる 平方根を取得する処理は非常に重いので使わない ( A + B < R ならば A^2 + B^2 < R^2 ) struct COLLISION { POINT location; double radius; bool isHit(COLLISION opponent) { return pow(location.x - opponent.location.x, 2) + pow(location.y - opponent.location.y, 2) < pow(radius + opponent.radius, 2); } }; 3.1 シューティングゲームの当たり判定

使い方 ACTOR に COLLISION を持たせれば良い ACTOR と COLLISION の座標は一致させる 移動の度に collision.location = location 3.1 シューティングゲームの当たり判定

使い方 実際に書くとこうなる(あくまで一例) struct ACTOR { POINT location; COLLISION collision; bool isHit(ACTOR opponent) { return collision.isHit(opponent.collision); } void move(int x, int y) { location.x += x; location.y += y; collision.location = location; }; 3.1 シューティングゲームの当たり判定

使い方 実際の処理はこんな感じになるね // // コードがたくさん // 自機と敵弾の当たり判定 for (int i = 0; i < BULLET_LIMIT; i++) { if ( player.isHit(enemyBullets[i]) ) { player.kill(); } 3.1 シューティングゲームの当たり判定

補足事項 高速すり抜け現象の回避 Wikiを見てね http://nanzanmmc.net/pc/lecture/game/add 他にもデバッグの手法はいろいろあるので是非見ておくように促しておく。 3.1 シューティングゲームの当たり判定