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

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

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

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

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

まずはベクトルクラス。

// ベクトルクラス
function Vector2(x,y){
this.x = x;
this.y = y;
}
Vector2.prototype.Add = function(v){
return new Vector2(this.x+v.x,this.y+v.y);
}
Vector2.prototype.Sub = function(v){
return new Vector2(this.x-v.x,this.y-v.y);
}
Vector2.prototype.Mult = function(t){
return new Vector2(this.x*t,this.y*t);
}
// 外積を求める
function Vector2Closs(v1,v2){
return (v1.x * v2.y) - (v1.y * v2.x);
}
// ベクトルの交点取得
function Vector2ClossPoint(s1,v1,s2,v2,eps){
if(!eps){
eps = 0;
}
var cross = Vector2Closs(v1,v2);
// 平行状態
if ( cross == 0 ) {
return false;
}
var v = s2.Sub(s1);
var cv1 = Vector2Closs( v, v1 );
var cv2 = Vector2Closs( v, v2 );
var t1 = cv2 / cross;
var t2 = cv1 / cross;
// 交差していない
if( ((t1 + eps) < 0) || ((t1 - eps) > 1) || ((t2 + eps) < 0) || ((t2 - eps) > 1)){
return false;
}
return s1.Add(v1.Mult(t1));
}

 

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

何かの役に立てばと。

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

You may also like...

コメントを残す

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