国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS寫的不咋地的碰撞檢測

gotham / 2371人閱讀

摘要:最近在學習碰撞檢測相關的知識,但說實話,寫的不咋地。因為真本來是正方形所以檢測的不是很準確。下面來批評一下這個的代碼。碰撞檢測的代碼因為碰撞可以分為這四個角度。因為使用了幾乎一直在重排,所以性能不是最好的,但效果基本上實現了。

最近在學習碰撞檢測相關的知識,但說實話,寫的不咋地。但是因為鄙人學識淺薄,所以覺得基本上還行,但是挺追求我完美的,所以想拿出來讓大神們批評批評。

先來看一下效果


感覺哇,真卡,真難受。因為真本來是正方形所以檢測的不是很準確。

下面來批評一下這個的代碼。

碰撞檢測的代碼

if((mover.offsetLeft + mover.offsetWidth >= target.offsetLeft) 
    && (mover.offsetTop +  mover.offsetHeight >= target.offsetTop) 
    && (target.offsetLeft + target.offsetWidth >= mover.offsetLeft)  
    && (target.offsetTop +  target.offsetHeight >= mover.offsetTop)  
    )

因為碰撞可以分為這四個角度。

1.左上角

2.右上角

3.左下角

4.右下角

5.整體圖示

只要在那個區域之內就行。

碰撞區域邊緣的代碼

setInterval(function move(e) {
    boll.style.left = boll.offsetLeft + (this.N * 10) + "px"; //改變小球的位置
    boll.style.top = boll.offsetTop + (this.T * 10)  + "px";
    if(boll.offsetLeft >= sq.offsetWidth - boll.offsetWidth || boll.offsetLeft <= 0 ){ //碰撞左右兩邊
        this.N *= -1; //改變方向(依自己喜好定義)
    }
    if(boll.offsetTop >= sq.offsetHeight - boll.offsetHeight || boll.offsetTop <= 0 ){ //碰撞上下兩邊
        this.T *= -1; //改變方向(依自己喜好定義)
    }   
}.bind(this), 50);

檢測每一個小球與其他小球是否碰撞

bollArr = [], //存放小球DOM元素,改變方向用
boll = []; //存放小球,檢測是否碰撞用
setInterval(function move(e) {
    for (var i = 0; i < bollArr.length; i ++) {
        for (var j = i + 1; j < bollArr.length; j ++) {
            collisionDetection(bollArr[i], bollArr[j], fes[i], fes[j]);
        }
    }
}, 50);

小球構造函數

function Boll() {
    this.backgroundColor = "rgba(35, 215, 65, .3)"; //小球顏色
    this.left = getRandom(400); //小球位置
    this.top = getRandom(400);
    this.N = 1;  //改變小球方向的數(自己可以精確定義,我就隨便定義了)
    this.T = 1;
    boll.push(this);
}

整體代碼

let sq = document.getElementById("square"), //獲取最外面的框
    bollArr = [], //小球DOM元素集合
    boll = []; //小球實例集合
function Boll() {  //構造函數
    this.backgroundColor = "rgba(35, 215, 65, .3)";
    this.left = getRandom(400);
    this.top = getRandom(400);
    this.N = 1;
    this.T = 1;
    boll.push(this);
}
let boll0 = new Boll(),
    boll1 = new Boll(),
    boll2 = new Boll();
Boll.prototype.createBoll = function() {  //創建小球
    let boll = document.createElement("div");
    boll.style.display = "none";
    boll.style.width =  "60px";
    boll.style.height = "60px";
    boll.style.backgroundColor = this.backgroundColor;
    boll.style.borderRadius = "50%";
    boll.style.position = "absolute";
    boll.style.left = this.left + "px";
    boll.style.top = this.top + "px";
    boll.style.display = "block";
    sq.appendChild(boll);
    bollArr.push(boll);
    setInterval(function move(e) {  //檢測是否和外面的框碰撞
        boll.style.left = boll.offsetLeft + (this.N * 10) + "px";
        boll.style.top = boll.offsetTop + (this.T * 10)  + "px";
        if(boll.offsetLeft >= sq.offsetWidth - boll.offsetWidth || boll.offsetLeft <= 0 ){
            this.N *= -1;
        }
        if(boll.offsetTop >= sq.offsetHeight - boll.offsetHeight || boll.offsetTop <= 0 ){
            this.T *= -1;
        }   
    }.bind(this), 50);
}
// 碰撞檢測
function collisionDetection(mover, target, boll, boll2) {
    if((mover.offsetLeft + mover.offsetWidth >= target.offsetLeft) 
        && (mover.offsetTop +  mover.offsetHeight >= target.offsetTop) 
        && (target.offsetLeft + target.offsetWidth >= mover.offsetLeft)  
        && (target.offsetTop +  target.offsetHeight >= mover.offsetTop)  
    ){
         boll.N *= -1;
         boll.T *= -1;
         boll2.N *= -1;
         boll2.T *= -1;
    }
}
boll0.createBoll();
boll1.createBoll();
boll2.createBoll();
// 為每兩個小球檢測是否碰撞
setInterval(function move(e) {
    for (var i = 0; i < bollArr.length; i ++) {
        for (var j = i + 1; j < bollArr.length; j ++) {
            collisionDetection(bollArr[i], bollArr[j], boll[i], boll[j]);
        }
    }
}, 50);

上面其實有很多不好和bug,希望看到的大神能批評幾句。
因為使用了offset...幾乎一直在重排,所以性能不是最好的,但效果基本上實現了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101008.html

相關文章

  • vue 百度地圖api進行地理解析(解決跨域問題)

    摘要:我采用了插件原生百度地圖的二次封裝,但是插件里的紅點標記需要用到經緯度值。 先扯一會兒 首先非常感謝大家的閱讀(感謝已加粗),這是我人生中第一次寫技術文章(以前打字都費勁),本人小white一個(秀一下英語詞匯量),技術不咋地,就是愛分享,動不動還來個原創,你說氣人不~ 閑話少說,進入主題!!! 重點部分 最近在做一個基于vue的設備管理系統,其中有一個需求:需要把設備所在地的...

    Freeman 評論0 收藏0
  • 最底層程序員的一點思考

    摘要:作為一名在最底層工作了年的程序員,大的風浪沒見過,游泳池的水倒是喝過幾口。為什么總有人能比你做的更好善于溝通讓你輕松跨域障礙很大比例的程序員不擅長溝通,埋頭寫自己的代碼,出了問題自己默不作聲,死憋一天。 作為一名在最底層工作了7年的程序員,大的風浪沒見過,游泳池的水倒是喝過幾口。一路走過來支撐著我繼續前行的是愛好、工作、還是錢?還是錢??還是??? 寫好代碼是你的工作 作為程序員,你的...

    邱勇 評論0 收藏0
  • uniapp table 組件

    摘要:最近在搗鼓項目,恰好用到組件,之前寫了個,后面一直都想寫一個像樣的,可以分享給別人用的組件。自己的水平一般,開發出來的組件可能代碼不咋地,還望路過大神斧正。 uniapp是2019年非常的火爆的一個Dcloud開發跨平臺前端工具,支持ios android wap,小程序,除了android有點卡外,其他暫時沒有發現什么瑕疵。 最近在搗鼓uniapp項目,恰好用到table組件,之前...

    Vultr 評論0 收藏0
  • 聽說你懂個J?——前端發展閑聊

    摘要:移動端迅猛發展的前期,和這樣的終端開發才是這個社會的主流,前端開發受限于網絡速度和沒有統一的標準,還是不受重視。同時,網絡的普及,也讓前端也正式邁入了移動端的開發。在可預見的將來,前端受益于靈活的部署和安裝,在移動端開發中比例會逐漸加重。 剛好周末和朋友聊起前端從受鄙視到變得重要這個話題,感慨前端這四年來的發展,遂有本文。 1. 前情提要 毋庸諱言,在我剛工作的時候,前端是還是一個不受...

    DrizzleX 評論0 收藏0

發表評論

0條評論

gotham

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<