1 / 12

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

3.1 シューティングゲームの当たり判定. 当たったら 死亡. 当たり判定とは. ゲーム上の 物体同士が 衝突 しているか の判定 自機 に 弾 が当たったかどうか 敵機 に 弾 が当たったかどうか 自機 が 地面 に接しているかどうか 自機 と アイテム が重なっているかどうか などの判定のこと. どうやって判定するのか. ほとんどの場合、 図形 を用いて判定する 実際に描画するのではなく、 裏で計算するだけ 図形以外の方法も存在するが、紹介はまた今度. 今回作る当たり判定. 今回は シューティングゲーム の当たり判定

tova
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

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

  8. 判定関数の実装 • 実際に書くとこうなる • 平方根を取得する処理は非常に重いので使わない ( A + B < R ならば A^2 + B^2 < R^2) structCOLLISION { 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 シューティングゲームの当たり判定

  9. 使い方 • ACTORに COLLISIONを持たせれば良い • ACTOR同士で当たり判定を実行する関数も作ろう • ACTORと COLLISIONの座標は一致させる • 移動の度にcollision.location = location 3.1 シューティングゲームの当たり判定

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

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

  12. 補足事項 • 高速すり抜け現象の回避 • Wikiを見てね http://nanzanmmc.net/pc/lecture/game/add 3.1 シューティングゲームの当たり判定

More Related