3.1
This presentation is the property of its rightful owner.
Sponsored Links
1 / 12

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


  • 72 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3 1

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

当たったら死亡


3 1

当たり判定とは

  • ゲーム上の物体同士が衝突しているかの判定

    • 自機に弾が当たったかどうか

    • 敵機に弾が当たったかどうか

    • 自機が地面に接しているかどうか

    • 自機とアイテムが重なっているかどうか

      などの判定のこと

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


3 1

どうやって判定するのか

  • ほとんどの場合、図形を用いて判定する

    • 実際に描画するのではなく、裏で計算するだけ

  • 図形以外の方法も存在するが、紹介はまた今度

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


3 1

今回作る当たり判定

  • 今回はシューティングゲームの当たり判定

    • 円×円の当たり判定がよく用いられる

重なっているので

当たり

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


3 1

なぜ円×円を使うのか

  • 弾の画像には長方形の方がフィットする

  • でも回転したら?

回転するほどズレる

※回転した長方形の判定は大変

回転してもズレない

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


3 1

当たり判定構造体の設計

  • 平面上に円を定義するのに必要な変数は・・・

    • 座標

    • 半径

  • 構造体に必要な関数は・・・

    • 当たり判定の実行

struct

COLLISION

POINT

location

こうなる

double

radius

bool

isHit(COLLISION)

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


3 1

判定関数の実装

  • 2つの円が重なっているかどうか調べるには?

    • ピタゴラスの定理を使おう

緑の線分 < 半径の和

なら重なっている

location.y - 相手.location.y

location.x- 相手.location.x

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


3 1

判定関数の実装

  • 実際に書くとこうなる

    • 平方根を取得する処理は非常に重いので使わない

      ( 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 シューティングゲームの当たり判定


3 1

使い方

  • ACTORに COLLISIONを持たせれば良い

    • ACTOR同士で当たり判定を実行する関数も作ろう

  • ACTORと COLLISIONの座標は一致させる

    • 移動の度にcollision.location = location

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


3 1

使い方

  • 実際に書くとこうなる(あくまで一例)

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 シューティングゲームの当たり判定


3 1

使い方

  • 実際の処理はこんな感じになるね

//

// コードがたくさん

//

// 自機と敵弾の当たり判定

for (int i = 0; i < BULLET_LIMIT; i++) {

if ( player.isHit(enemyBullets[i]) ) {

player.kill();

}

}

//

// コードがたくさん

//

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


3 1

補足事項

  • 高速すり抜け現象の回避

    • Wikiを見てね

      http://nanzanmmc.net/pc/lecture/game/add

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


  • Login