用JS實現方塊碰撞

Adinsclay發表於2021-12-06

首先我們應用上次的內容——方塊拖拽,利用方塊拖拽來讓兩個方塊進行碰撞。

我們可以先定義兩個正方形方塊,紅色的div1,綠色的div2,我們來實現當div1碰撞div2時div2的顏色變為黃色

  HTML程式碼如下:定義方塊

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 8     <title>Document</title>
 9     <style>
10         body {
11             margin: 0;
12         }
13         #div1 {
14             width: 100px;
15             height: 100px;
16             background: red;
17             position: absolute;
18             left: 0;
19             top: 0;
20         }
21 
22         #div2 {
23             width: 100px;
24             height: 100px;
25             background: green;
26             position: absolute;
27             left: 500px;
28             top: 200px;
29         }
30     </style>
31 </head>
32 
33 <body>
34 <div id="div1"></div>
35 <div id="div2"></div>
36 </body>
37 
38 </html>

利用上個文章的的拖拽內容:令div1可以拖拽

 1 <script>
 2     var div1 = document.getElementById('div1')
 3     var div2 = document.getElementById('div2')
 4 
 5     div1.onmousedown = function (event) {
 6         var chaX = event.clientX - div1.offsetLeft
 7         var chaY = event.clientY - div1.offsetTop
 8 
 9         document.onmousemove = function (event) {
10             div1.style.left = event.clientX - chaX + 'px'
11             div1.style.top = event.clientY - chaY + 'px'
12         }
13 
14         document.onmouseup = function () {
15             document.onmousemove = null
16         }
17 
18 
19     }
20 
21 
22 </script>

因為我們每次拖拽都要判斷是否碰撞,我們的碰撞程式碼應該放在移動的裡面

新增後:

 1 <script>
 2     var div1 = document.getElementById('div1')
 3     var div2 = document.getElementById('div2')
 4 
 5     div1.onmousedown = function (event) {
 6         var chaX = event.clientX - div1.offsetLeft
 7         var chaY = event.clientY - div1.offsetTop
 8 
 9         document.onmousemove = function (event) {
10             div1.style.left = event.clientX - chaX + 'px'
11             div1.style.top = event.clientY - chaY + 'px'
12 
13             if (div1.offsetLeft + div1.offsetWidth < div2.offsetLeft ||
14                 div2.offsetLeft + div2.offsetWidth < div1.offsetLeft ||
15                 div1.offsetTop + div1.offsetHeight < div2.offsetTop ||
16                 div2.offsetTop + div2.offsetHeight < div1.offsetTop
17             ) {
18                 div2.style.backgroundColor = ''
19             } else {
20                 div2.style.backgroundColor = 'yellow'
21             }
22 
23         }
24         document.onmouseup = function () {
25             document.onmousemove = null
26         }
27     }
28 
29 </script>

可以看到我們在移動的程式碼裡新增了判斷條件

讓div1的左邊距加上div1的寬度小於div2的左邊距,讓div2的左邊距加上div2的寬度小於div1的左邊距,讓div1的上邊距加上div1的高度小於div2的上邊距,讓div2的上邊距加上div2的高度小於div1的上邊距,滿足這些條件就是未碰上。

相關文章