人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ゲームのアルゴリズムについて質問です。2つのキャラクターの衝突検知を、キャラクターが少しでも重なったかどうかで、判定します。2つのキャラクターは常に動いており、スピードも一定でないため、時々、重ならずにすり抜けてしまうことがあります。その場合、衝突検知できません。こうした場合の対処法が記載してあるサイトはあるでしょうか?

●質問者: loopring
●カテゴリ:コンピュータ 学習・教育
✍キーワード:アルゴリズム キャラクター ゲーム サイト スピード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ANSUKOEMU
●100ポイント

http://d.hatena.ne.jp/ANSUKOEMU/

MAGNITUDE-Μ

URLはダミー

まず、2Dなのか3Dなのかで、難易度が大きく変わります。

ここでは2Dであるとの仮定で説明しておきます。


すり抜けが起こるのは、ある瞬間(大抵の場合、描画フレーム)での衝突しか考慮

していないためで、防止するには移動開始から移動完了までの途中もチェックを

かけてあげる必要があります。

あらゆるタイミングをチェックするのは無理なので、描画フレーム間を何分割か

して、描画はしないけど衝突チェックはするというタイミングを設けることで

改善できます。

描画フレームごとにチェックを行なっている場合、例えばフレーム間を4分割し、

描画+チェック、チェック、チェック、チェック、描画+チェック …

というように各タイミングでチェックは必ず行なうようにすれば、チェック間の

キャラクターの移動量は1/4になりますので、衝突判定の精度が向上します。


チェックの頻度が多くなりますので、瞬間ごとの衝突判定が重いと不利です。

特に、ビットマスクの重なりで衝突判定している場合、チェックの頻度を上げる

ことは速度的に難しくなってしまいます。

キャラクターの当り判定を円に置換えて、円どうしの重なりを判定することで

簡略化できます。

円Aと円Bの重なりチェックは、円Aの中心から[円Aの半径+円Bの半径]の範囲内に

円Bの中心があるかどうかを見ることでわかります。


円同士の判定の場合で更に速度が欲しいときは、描画フレーム間にキャラクタが

移動した軌跡を求めてベクトルで交差判定するというやり方もあります。

円Aの中心から[円Aの半径+円Bの半径]の範囲内に、円Bの移動ベクトル(移動前と

移動後の位置を結んだ半直線)に重なりがあるかをチェックします。

これをAとBの関係を入替えて相互に行なって、両方とも重なり有りとでれば

衝突があるとみなします。(長円どうしの重なり判定ということになります)

この考え方は、フレーム間にチェックのタイミングを設ける必要がありませんが、

キャラクタの大きさに対して移動量が大きすぎる場合、厳密には移動途中で当り

はないはずなのに衝突判定が出てしまったりする可能性もあります。

http://www.antun.net/tips/algorithm/collision.html

Atsushi's Homepage ?` ????????A???S???Y??

円と線分の交差(球と線分の交差)については、ここが参考になります。

http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%B8%F2%BA%B9%C8%BD%C4%...

交差判定_3DCG - FreeStyleWiki

3D空間での衝突判定。

http://www.cam.hi-ho.ne.jp/strong_warriors/teacher/index.html

3年D組モチヲ先生

ベクトル等をわかりやすく解説。

◎質問者からの返答

衝突チェックの頻度を上げたり、円に置き換えたり、ベクトルを使うなど様々な方法があるんですね。

自分のケースの場合、2Dです。

まず、チェックのタイミングを増やす方法を試してみます。

詳細でわかりやすい回答、ありがとうございました。


2 ● hichikawa
●10ポイント

http://www.bun-eido.co.jp/textbook/m_textbook/pascal/pb.html

?????w?Z???wB

具体的な説明ではないですが,高校数学などでも扱うベクトル演算で二つのキャラクターの始点と終点をそれぞれ結ぶ直線の交点を求め,始点と終点の間にあるかを判定すればよいかと思います。

◎質問者からの返答

回答、ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ