2Dアクションゲームにも使える JavaScriptで衝突判定

ちょっと仕事で使ったのでメモ。

javascriptでゲーム作ることになったのでそのときに作成したクラス。

まぁ必要最低限ですがさらしておきます。

まずはベクトルクラス。

<br />
// ベクトルクラス<br />
function Vector2(x,y){<br />
this.x = x;<br />
this.y = y;<br />
}<br />
Vector2.prototype.Add  <a href="http://luckysbb.com/need-to-catch-a-train-or-plane-luckys-bark-ride-can-save-the-day/">Ride</a>  = function(v){<br />
return new Vector2(this.x+v.x,this.y+v.y);<br />
}<br />
Vector2.prototype.Sub = function(v){<br />
return new Vector2(this.x-v.x,this.y-v.y);<br />
}<br />
Vector2.prototype.Mult = function(t){<br />
return  <a href="http://dichvulamsach.com/hello-world.html">?úng</a>  new Vector2(this.x<em>t,this.y</em>t);<br />
}<br />
// 外積を求める<br />
function Vector2Closs(v1,v2){<br />
return (v1.x * v2.y) &#8211; (v1.y * v2.x);<br />
}<br />
// ベクトルの交点取得<br />
function Vector2ClossPoint(s1,v1,s2,v2,eps){<br />
if(!eps){<br />
eps = 0;<br />
}<br />
var cross = Vector2Closs(v1,v2);<br />
// 平行状態<br />
if ( cross == 0 ) {<br />
return false;<br />
}<br />
var v = s2.Sub(s1);<br />
var cv1 = Vector2Closs( v, v1 );<br />
var cv2 = Vector2Closs( v, v2 );<br />
var t1 = cv2 / cross;<br />
var t2 = cv1 / cross;<br />
// 交差していない<br />
if( ((t1 + eps) &lt; 0) || ((t1 &#8211; eps) &gt; 1) || ((t2 + eps) &lt; 0) || ((t2 &#8211; eps)  <a href="https://www.ateliee.com/archives/463">SVGを簡単に使えるjavascriptライブラリ「Raphael.js」</a>  &gt; 1)){<br />
return false;<br />
}<br />
return s1.Add(v1.Mult(t1));<br />
}<br />

 

線分と点の交差点を求める関数です。

何かの役に立てばと。

もっといい方法があればコメントください。

You may also like...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です