Javascript 需要简单碰撞检测算法的帮助吗

Javascript 需要简单碰撞检测算法的帮助吗,javascript,html,canvas,Javascript,Html,Canvas,好吧,我的简单碰撞检测算法不起作用了。它总是激活(除非玩家在x和/或y平面上没有任何碰撞) 好的,下面是代码: collisionCheck: function(bArray){ for(var i = 0; i < bArray.length; i++){ for(var j = 0; j < bArray[i].length; j++){ if(bArray[i][j].getType() != 0){

好吧,我的简单碰撞检测算法不起作用了。它总是激活(除非玩家在x和/或y平面上没有任何碰撞)

好的,下面是代码:

collisionCheck: function(bArray){
    for(var i = 0; i < bArray.length; i++){
        for(var j = 0; j < bArray[i].length; j++){
            if(bArray[i][j].getType() != 0){
                if((bArray[i][j].getX() > this.x && bArray[i][j].getX() < this.x + this.width) ||
                    (bArray[i][j].getX() + blockSize > this.x && bArray[i][j].getX() + blockSize < this.x + this.width) &&
                    (bArray[i][j].getY() > this.y && bArray[i][j].getY() < this.y + this.height) || 
                    (bArray[i][j].getY() + blockSize > this.y && bArray[i][j].getY() + blockSize < this.y + this.height)){
                    this.x = 0;
                }
            }
        }
    }
}
冲突检查:功能(bArray){
对于(变量i=0;ithis.x&&bArray[i][j].getX()this.x&&bArray[i][j].getX()+blockSizethis.y&&bArray[i][j].getY()this.y&&bArray[i][j].getY()+blockSize
查看它为什么在不应该激活时激活的原因吗?

函数spritecollision(x1、y1、w1、h1、x2、y2、w2、h2){
function spritecollision(x1,y1,w1,h1,x2,y2,w2,h2){
    if(x2<(x1+w1)&&(x2+w2)>x1&&y2<(y1+h1)&&(y2+h2)>y1)return 1;
}
如果(x2x1&y2y1)返回1; }
因此,如果您希望它始终处于激活状态,除非发生碰撞,请使用
!精灵碰撞

资料来源:

编辑:这是最好的答案。很完美。

试试这个:

collisionCheck: function(bArray){
  for(var i=0,len=bArray.length; i<len; ++i){
    for(var j=0,len2=bArray[i].length; j<len2; ++j){
      if(!bArray[i][j].getType()) continue;
      var x = bArray[i][j].getX(), y = bArray[i][j].getY();
      var x2 = x+blockSize, y2 = y+blockSize;
      var overlapping = (x2>this.x) && (x<(this.x+this.width)) && (y2>this.y) && (y<(this.y+this.height));
      if (overlapping) this.x = 0; // I don't know why you'd do this, but it's what you have
    }
  }
  // Should this function return anything?
}
冲突检查:功能(bArray){

对于(var i=0,len=bArray.length;ithis.x)&&&&(xthis.y)&&&(y)与验证布尔逻辑相分离,这更短更好:
return x2x1&&y2y1;
No,我只处理类型Number。谁需要布尔值?这是我的函数,我在我的网站上使用它。