ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルを使用したゲーム開発における衝突検出用のカプセル化コード

javascript_javascript スキルを使用したゲーム開発における衝突検出用のカプセル化コード

WBOY
WBOYオリジナル
2016-05-16 16:06:571439ブラウズ

JavaScript を使用して Web ゲームを開発する場合、開発を容易にするために衝突検出が必要です。長方形と円形の 2 つの衝突検出メソッドがカプセル化されています。

【ケース操作で1つをキャプチャ】
[注: コードは最適化されていません]

デモ画像

キャラクター攻撃エリア衝突検出.gif

タワーディフェンスケース.gif

長方形領域の衝突検出

/**
 * 矩形区域碰撞检测
 * Created by Administrator on 14-4-7.
 * author: marker
 */
function Rectangle(x, y, _width, _height){
  this.x = x;
  this.y = y; 
  this.width = _width;
  this.height = _height;
   
  //碰撞检测(参数为此类)
  this.intersects = function(obj){
    var a_x_w = Math.abs((this.x+this.width/2) - (obj.x+obj.width/2));
    var b_w_w = Math.abs((this.width+obj.width)/2);
    var a_y_h = Math.abs((this.y+this.height/2) - (obj.y+obj.height/2)); 
    var b_h_h = Math.abs((this.height+obj.height)/2);
    if( a_x_w < b_w_w && a_y_h < b_h_h ) return true;
    else return false;
  }
 
}

円形領域の衝突検出

/**
 * 圆形区域碰撞检测
 * Created by Administrator on 14-4-7.
 * author: marker
 *
 */
function RadiusRectangle(x, y, radius){
  this.x = x;
  this.y = y;
  this.radius = radius;
 
  //碰撞检测(参数为此类)
  this.intersects = function(rr){
    var maxRadius = rr.radius + this.radius;
    // 已知两条直角边的长度 ,可按公式:c&sup2;=a&sup2;+b&sup2; 计算斜边。
    var a = Math.abs(rr.x - this.x);
    var b = Math.abs(rr.y - this.y);
    var distance = Math.sqrt(Math.pow(a,2) + Math.pow(b,2));// 计算圆心距离
    if(distance < maxRadius){
      return true;
    }
    return false;
  }
}

以上がこの記事の全内容です。皆さんの JavaScript の理解に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。