スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

固定レーザー

レーザー的な何か


どうも


どうにか今月中に更新できてよかったです


今回は、前回言った通り固定レーザーとその当たり判定(線対円)を作りました ついでにエフェクトも レーザーの始点の光ってるそれが一応エフェクトです


今のところ被弾、またはボムの範囲に入っても消えたりしませんが、そのうちレーザーの始点が自機に触れたりボムの範囲に入ったりしたらレーザーが消えて範囲から外れたらまた始点からレーザーが伸びてくる、みたいなこともやろうと思います


因みに今回は円(自機)対太さのある線(レーザー)で判定を行いました


これにはベクトルの内積と外積を使います


※諸事情により、この文章を書くのは4回目です。満身創痍です。くたくたです。なのでところどころ日本語がおかしかったり表現がくどかったりすることがありますがあらかじめご了承ください


まず、ベクトルa(ax, ay)、b(bx, by)の内積は


a・b = |a||b|cosθ (ベクトルの絶対値はベクトルの長さ、aとbが成す角度をθとします)


と定義されます。なので、


a⊥b の時は a・b = 0 になり、
θが鈍角の時は a・b < 0 になり、
θが鋭角の時は a・b > 0 になります


なので、レーザーの始点から終点までのベクトルをa、レーザーの始点から自機までのベクトルをbとすると、


線対円01


①a・b ≦ 0 の時、自機はレーザーの始点よりも外側にあるので、自機とレーザ-の最短距離はレーザーの始点から自機までの距離(|b|)ということになります


線対円02


なので、円(自機)対円(中心がレーザーの始点、半径がレーザーの太さ)で判定することができます


ちなみに内積は、θが分からなくとも


ax * bx + ay * by


で求めることができます。なぜかは知りません


a・b > 0 の時は自機がレーザーの始点よりも内側にあるので、次のステップに移行します


次は自機がレーザーの終点からどちら側にあるかを調べます


これは単にレーザーの終点から始点までのベクトルとレーザーの終点から自機までのベクトルの内積を求めればいいですが、今回は上で出したa・bを活用します


|a||b|cosθ から|a|を割ると


|b|cosθ


となります。 この値はbの終点からaに向けて垂線を引いた時のaの始点からaと垂線の交点までの距離ということになります。


線対円03



なので、この値が|a|以上の時、つまり交点がaの終点になる時、または交わらない時、自機はレーザーの終点よりも外側にあるので、自機とレーザ-の最短距離はレーザーの終点から自機までの距離ということになります


線対円04



つまり、


②a・b / |a| ≧ |a| の時、円(自機)対円(中心がレーザーの終点、半径がレーザーの太さ)で判定することができます



a・b / |a| < |a| の時は自機がレーザーの終点よりも内側にあるので、最後のステップに移行します


①、②両方に当てはまらない時、自機とレーザーの最短距離はbの終点からaに向けて垂線を引いた時の垂線の長さということになります


線対円05


この長さを調べるにはベクトルの外積は使います


外積は


a×b = |a||b|sinθ


と定義され、これもθが分からなくとも


ax * by - ay * bx


で求めることができます。なぜかは知りません


そして、


|a||b|sinθ から|a|を割ると


|b|sinθ


となり、この値はbの終点からaに向けて垂線を引いた時の垂線の長さということになります。


線対円06


ここで注意したいのは、この値には符号が付きます。つまり-だったりすることもあります。


なぜかと言うと、θの値が270 < θ < 360の時、sinの値がマイナスになるからです。


なので必ずこの値の絶対値と比較してください


つまり


③ | a×b / |a| | < 自機の当たり判定の広さ + レーザーの太さ の時、当たってるということになります


①、②、③すべてに当てはまらない場合、当たってないということになります


さて、固定レーザーは実装できたので次はショートレーザーを作ろうと思います


ではまた


スポンサーサイト

プロフィール

Naname

Author:Naname
アニメ見たりゲームしたりが趣味の所謂オタク
最近はC++とDXライブラリでゲーム作ってます

Twitter

 

FC2カウンター

Time is Money

時間給が円とすると

低さに定評のある更新頻度

頻度が0.1記事を下回ったら本気だす

検索フォーム

ブロとも申請フォーム

QRコード

QRコード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。