Rumah >hujung hadapan web >tutorial js >Kod enkapsulasi untuk pengesanan perlanggaran dalam pembangunan permainan menggunakan kemahiran javascript_javascript

Kod enkapsulasi untuk pengesanan perlanggaran dalam pembangunan permainan menggunakan kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 16:06:571457semak imbas

Apabila membangunkan permainan web dengan JavaScript, pengesanan perlanggaran diperlukan Untuk memudahkan pembangunan, dua kaedah pengesanan perlanggaran, segi empat tepat dan bulat, dikapsulkan.

【Tangkap satu dengan operasi kes】
[Nota: Kod belum dioptimumkan]

Gambar demo

Pengesanan perlanggaran kawasan serangan watak.gif

Kes pertahanan menara.gif

Pengesanan perlanggaran kawasan segi empat tepat

/**
 * 矩形区域碰撞检测
 * 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;
  }
 
}

Pengesanan perlanggaran kawasan bulat

/**
 * 圆形区域碰撞检测
 * 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;
  }
}

Di atas adalah keseluruhan kandungan artikel ini saya harap ia akan membantu semua orang dalam memahami javascript.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn