Rumah > Soal Jawab > teks badan
Saya mempunyai permainan di mana seorang pemain dikawal oleh kekunci anak panah dan pemain lain dikawal oleh kekunci WSAD. Saya mempunyai peta yang disediakan dalam kanvas 600x600 dan ingin menambah perlanggaran antara dua pemain dalam pengisian permainan. Betulkan apabila dua pemain berada dalam radius tertentu, sama ada menamatkan program atau memaparkan teks seperti "Game The end"
Berikut ialah kod js, Html dan Css saya (untuk melihat coretan kod anda perlu pergi ke "Skrin Penuh"):
//Canvas mycan.style.display = "block"; mycan.height = 600; mycan.width = 600; //make players let player = {x:511, y: 541, w:29, h:29}; let player2 = {x:60, y:31, w:30, h:29}; //Context const ctx = mycan.getContext("2d"); //Start-position ctx.fillRect(player.x, player.y, player.w, player.h); ctx.fillRect(player2.x, player2.y, player2.w, player2.h); //No-smooth-movement window.onkeydown = move = (e) => { let key = e.keyCode; //player1(red) if (key === 68 && player2.x <= mycan.width-30) {player2.x += 30;} //right else if(key === 65 && player2.x >= 10) {player2.x -= 30;} //left else if(key === 83 && player2.y <= mycan.height-30) {player2.y += 30;} //down else if(key === 87 && player2.y >= 10) {player2.y -= 30;} //up //player2(blue) if (key === 39 && player.x <= mycan.width-25) {player.x += 30;} //right else if(key === 37 && player.x >= 10) {player.x -= 30;} //left else if(key === 40 && player.y <= mycan.height-25) {player.y += 30;} //down else if(key === 38 && player.y >= 10) {player.y -= 30;} //up } const draw = ()=>{ //player draw, and player colors ctx.clearRect(0,0, mycan.width, mycan.height); ctx.fillRect(player.x, player.y, player.w, player.h); ctx.fillStyle = "blue"; ctx.fillRect(player2.x,player2.y, player2.w, player2.h); ctx.fillStyle = 'red'; }; setInterval(()=>{ draw(); },1000/60); //collision //thsi is where i want to add collision
html, body { margin:20; padding: 20; } canvas { display: block; } #mycan { background-size: 30px 30px; background-image: linear-gradient(to right, black 1px, transparent 1px), linear-gradient(to bottom, black 1px, green 1px); }
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" type="text/css" href="style.css"> <meta charset="utf-8" /> <canvas id = mycan > </canvas> <font color = 'blue'> <h1>Player1 = blue</h1></font color> <font color = 'red'> <h1>Player2 = red</h1></font color> </head> <body> <main> </main> <script src="script.js"></script> </body> </html>
P粉7528128532023-09-16 10:18:25
Saya telah menulis anda fungsi yang menyemak perlanggaran.
Kami melakukannya dengan terlebih dahulu menyemak sama ada tepi kiri rect1 lebih jauh ke kanan daripada tepi kanan rect2. Kami juga menyemak sama ada tepi kanan rect1 lebih jauh ke kiri daripada tepi kiri rect2.
Perkara yang sama untuk tepi bawah.
jika semua itu palsu, segi empat tepat mesti bertindih.
const checkCollision = (rect1, rect2) => { return rect1.x < rect2.x + rect2.w &&rect1.x + rect1.w > rect2.x &&rect1.y < rect2.y + rect2.h &&rect1.y + rect1.h > rect2.y }