JavaScript 碰撞检测

标签 javascript html

您好,我是这个论坛的新手,也是 JavaScript 编程的新手,我想知道为什么我的碰撞检测不起作用。我不想使用任何像 JQuery 这样的库,我只是希望它能够与纯 JavaScript 一起使用。感谢您的帮助,这是代码

var can = document.getElementById("mainCanvas");
var ctx = can.getContext("2d");
var player1 = {x:"20", y:"20", w:"20", h:"20"};
var enemy1 = {x:"50", y:"50", w:"20", h:"20"};
ctx.fillRect(player1.x,player1.y,player1.w,player1.h);
ctx.fillRect(enemy1.x,enemy1.y,enemy1.w,enemy1.h);
//right arrow moves block right
window.addEventListener("keydown",function(e){
if(e.keyCode==39){
     ctx.clearRect(player1.x,player1.y,player1.w,player1.h);
     player1.x++;
     ctx.fillRect(player1.x,player1.y,player1.w,player1.h);
}});
//left arrow moves block left
window.addEventListener("keydown",function(e){
if(e.keyCode==37){
     ctx.clearRect(player1.x,player1.y,player1.w,player1.h);
     player1.x--;
     ctx.fillRect(player1.x,player1.y,player1.w,player1.h);
}});
//up arrow makes block up
window.addEventListener("keydown",function(e){
if(e.keyCode==38){
     ctx.clearRect(player1.x,player1.y,player1.w,player1.h);
     player1.y--;
     ctx.fillRect(player1.x,player1.y,player1.w,player1.h);
}});
//down arrow makes block go down
window.addEventListener("keydown",function(e){
if(e.keyCode==40){
     ctx.clearRect(player1.x,player1.y,player1.w,player1.h);
     player1.y++;
     ctx.fillRect(player1.x,player1.y,player1.w,player1.h);
}});

if(player1.x == enemy1.x && player1.y == enemy1.y){
alert("touch");
}

最佳答案

我同意 Micah 的观点,你可能应该使用现有的物理引擎。

但是,您的碰撞检测代码不起作用的原因是它没有考虑敌人和玩家的宽度和高度。目前,只有当玩家和敌人完全重叠时才会触发(例如,双方左上角的像素接触)。

你需要什么而不是if (player1.x == enemy1.x && player1.y == enemy1.y)类似于: if (player1.x + player1.w > enemy1.x && player1.x < enemy1.x + enemy1.w && player1.y + player1.h > enemy1.y && player1.y < enemy1.y + enemy1.h)

它检查玩家和敌人是否在任何一侧重叠。

关于JavaScript 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37670682/

相关文章:

javascript - 未捕获的 TypeError : . 包含不是 React Ref 的函数

javascript测试一个值是否是一个数字和一个大于0的数字

JavaScript 嵌套对象

javascript - 使用给定值检查单选按钮的值

javascript - .html() 中 href 的 jQuery 选择器

javascript - 在 JavaScript 中编写 html bean

javascript - 如何使用 AngularJS/Ionic 作为 Backbone/Cordova 项目的一部分?

javascript - 在页面加载时隐藏 tbody,永久显示 thead 组,使用 jQuery 在下拉选择中显示 tbody

html - CSS 在中间垂直对齐 LI

html - 在 <div> 和 <panel-groups> 之间出现异常空间的情况下使用 Bootstrap 3.0