Javascript 画布碰撞?

Javascript 画布碰撞?,javascript,html,html5-canvas,2d-games,Javascript,Html,Html5 Canvas,2d Games,正在测试我的游戏,当用户和怪物发生碰撞时,我希望弹出警报,但没有运气: function die() { for (var i = 0; i < monster.length; i++) { if (user.destinationX === monster[i].destinationX && user.destinationY === monster[i].destinationY { alert("die"); } } } 函数

正在测试我的游戏,当用户和怪物发生碰撞时,我希望弹出警报,但没有运气:

function die() {

  for (var i = 0; i < monster.length; i++) {
    if (user.destinationX === monster[i].destinationX && user.destinationY === monster[i].destinationY {
      alert("die");
    }
  }
}
函数die(){
对于(变量i=0;i< /代码> 不要使用严格的比较。因为帧速率可能不同。现在你要检测像素的碰撞。你应该考虑每个物体的形状

不要使用严格的比较。因为帧速率可能不同。现在你要检测像素的碰撞。你应该考虑每个物体的形状< /p> 试试这个碰撞。n检测方法。它基于两个对象的重叠来检测两个对象之间的碰撞

function hasCollision(object1, object2) {
  if (object1.x + object1.width < object2.x) return false;
  if (object1.x > object2.x + object2.width) return false;
  if (object1.y + object1.height < object2.y) return false;
  if (object1.y > object2.y + object2.height) return false;
  return true;
}

function die() {
  for (var i = 0; i < monster.length; i++) {
    if (hasCollision(user, monster)) {
      alert("die");
    }
  }
}
函数hasCollision(object1、object2){
if(object1.x+object1.widthobject2.x+object2.width)返回false;
if(object1.y+object1.heightobject2.y+object2.height)返回false;
返回true;
}
函数die(){
对于(变量i=0;i

此碰撞检测考虑对象的形状(正方形/矩形)并检查两个对象是否重叠。它还需要对象的宽度和高度来确定对象的边在哪里(或者您可以根据当前拥有的内容对其进行修改).

试试这种碰撞检测方法。它根据两个对象的重叠检测两个对象之间的碰撞

function hasCollision(object1, object2) {
  if (object1.x + object1.width < object2.x) return false;
  if (object1.x > object2.x + object2.width) return false;
  if (object1.y + object1.height < object2.y) return false;
  if (object1.y > object2.y + object2.height) return false;
  return true;
}

function die() {
  for (var i = 0; i < monster.length; i++) {
    if (hasCollision(user, monster)) {
      alert("die");
    }
  }
}
函数hasCollision(object1、object2){
if(object1.x+object1.widthobject2.x+object2.width)返回false;
if(object1.y+object1.heightobject2.y+object2.height)返回false;
返回true;
}
函数die(){
对于(变量i=0;i

此碰撞检测考虑对象的形状(正方形/矩形)并检查两个对象是否重叠。它还需要对象的宽度和高度来确定对象的边在哪里(或者您可以根据当前拥有的内容对其进行修改).

我将提供一个带解释的合并答案。如果你喜欢这个解释,请相信或

正如Kolink所提到的,你的问题是,pacman的小故障,或者更确切地说,你的怪物不仅仅是像素——它们有自己的大小。你目前正在检查一个对象的原点,看它是否与另一个实体的原点完全相等——这种情况很少见,如果有的话。相反,你需要检查的是怪物的大小s至少有一个公共点(换句话说,碰撞检查)


这可以通过检查一个的原点是否在另一个的边界框内,或者换句话说,如果
monster2.x我将提供一个带有解释的合并答案来完成。如果您喜欢解释,请相信或

正如Kolink所提到的,你的问题是,pacman的小故障,或者更确切地说,你的怪物不仅仅是像素——它们有自己的大小。你目前正在检查一个对象的原点,看它是否与另一个实体的原点完全相等——这种情况很少见,如果有的话。相反,你需要检查的是怪物的大小s至少有一个公共点(换句话说,碰撞检查)


这可以通过检查一个的原点是否在另一个的边界框内,或者换句话说,如果
monster2.x您所经历的类似于PacMan中的小故障,您偶尔可以穿过一个幽灵而不死亡。也就是说,期望位置相等,而不是检查距离是否相等它们之间的距离太近。你所经历的类似于PacMan中的小故障,你偶尔可以直接穿过幽灵而不致死亡。也就是说,期望位置相等,而不是检查它们之间的距离是否太近。真的吗?你是单击“添加”按钮还是“编辑”按钮?真的吗?你是单击“添加”按钮吗按钮?还是“编辑”按钮?@Kolink抱歉。我实际上正在解释:)@Kolink抱歉。实际上,我正在做一些解释:)