首先我們先要了解一下碰撞檢測有什么用?
碰撞檢測常用於游戲開發,通過碰撞檢測判斷前面是否有障礙物以及兩個物體是否發生碰撞,根據檢測的結果做出不同的處理,
碰撞檢測就是查看物體是否重合
下面寫一個簡單的碰撞檢測代碼
首先創建兩個正方形div
<div id="box1">移動</div> <div id="box2">障礙</div>
在設置顏色
div{ width:100px; height: 100px; position: absolute; background: bisque; text-align: center; line-height: 100px; color:rebeccapurple; } #box2{ left:300px; top:200px; }
寫出移動正方形判斷是否碰撞
var box = document.getElementsByTagName('div'); box[0].onmousedown = function(){ var disX = event.clientX - this.offsetLeft; var disY = event.clientY - this.offsetTop; document.onmousemove = function(){ box[0].style.left = event.clientX - disX + "px"; box[0].style.top = event.clientY - disY + "px"; if(collision(box[0],box[1])){ //碰到了 box[1].style.background = "pink" }else{ box[1].style.background = "lightseagreen"; } } document.onmouseup = function(){ document.onmousemove = null; } }
這邊把檢測寫成函數了
function collision(obj1,obj2){ //obj1的四條邊 var l1 = obj1.offsetLeft; var r1 = l1 + obj1.offsetWidth; var t1 = obj1.offsetTop; var b1 = t1 + obj1.offsetHeight; //obj2的四條邊 var l2 = obj2.offsetLeft; var r2 = l2 + obj2.offsetWidth; var t2 = obj2.offsetTop; var b2 = t2 + obj2.offsetHeight; if(r2 < l1 || b2 < t1 || l2 > r1 || t2 > b1){ return false }else{ return true } }
調用函數, obj是要指定傳參數
function drag(obj){ obj.onmousedown = function(){ //記錄鼠標在元素上的坐標位置 var disX = event.clientX - this.offsetLeft; var disY = event.clientY - this.offsetTop; document.onmousemove = function(){ obj.style.left = event.clientX - disX + "px"; obj.style.top = event.clientY - disY + "px"; } document.onmouseup = function(){ document.onmousemove = null; } } } drag(box[1])