Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于冲突检测的setInterval内循环的JavaScript?_Javascript_Canvas_For Loop_Collision Detection_Setinterval - Fatal编程技术网

用于冲突检测的setInterval内循环的JavaScript?

用于冲突检测的setInterval内循环的JavaScript?,javascript,canvas,for-loop,collision-detection,setinterval,Javascript,Canvas,For Loop,Collision Detection,Setinterval,我目前正在用JavaScript重新制作一部《太空入侵者》,到目前为止,我的动画制作一直非常出色 你看,我有一个名为Alien的对象,它保存一个外来数据。每次创建外星人时,它都会被分别添加到一个外星人数组中,即name外星人。我还有一个名为Shot的Object,它保存着玩家在Shot上的信息Shot调用自身的setInterval方法,该方法允许它更新并自动向上移动屏幕。我想最好在这里进行碰撞检测调用,因为我可以访问相关的变量 不过JavaScript似乎并不喜欢它。例如,我将以下代码作为我的

我目前正在用JavaScript重新制作一部《太空入侵者》,到目前为止,我的动画制作一直非常出色

你看,我有一个名为
Alien
对象,它保存一个外来数据。每次创建外星人时,它都会被分别添加到一个外星人数组中,即name
外星人
。我还有一个名为
Shot
Object
,它保存着玩家在
Shot
上的信息
Shot
调用自身的
setInterval
方法,该方法允许它更新并自动向上移动屏幕。我想最好在这里进行碰撞检测调用,因为我可以访问相关的变量

不过JavaScript似乎并不喜欢它。例如,我将以下代码作为我的自动更新动画:

this.draw = function(shot){
    board.fillStyle = "black";
    board.fillRect(shot.x - 1, shot.y + 1, shot.img.width+2,shot.img.height+2);
    shot.y -= 1; 
    if(shot.y < -5){
        clearInterval(shot.shooting);
    }
    board.drawImage(shot.img, shot.x, shot.y); 

    if(isCollidingWithAlien(shot)){
        //Do Collision Detectiony Stuffs
    }
};
下面是碰撞检测代码:

// returns true if there is any overlap
// params: x,y,w,h of two rectangles
function intersects(x1, y1, w1, h1, x2, y2, w2, h2) {
    w2 += x2;
    w1 += x1;
    if (x2 > w1 || x1 > w2) 
        return false;
    h2 += y2;
    h1 += y1;
    if (y2 > h1 || y1 > h2) 
        return false;
    return true;
}
下面是一个JSFiddle,可以看到它的全部功能:

您有一个断开的for语句

外星人
替换为
外星人。长度

for (var i = 0; i < aliens.length; i++) {
        console.log("isCollidingWithAlien");
        return intersects(
        shot.x,
        shot.y,
        shot.img.width,
        shot.img.height,
        aliens[i].x,
        aliens[i].y,
        document.getElementById("alien").width,
        document.getElementById("alien").height);
}
(变量i=0;i
for.length;i++){
log(“isCollidingWithAlien”);
返回交叉点(
快照.x,
射门,y,
shot.img.width,
镜头高度,
外星人[i].x,
外星人[i].y,
document.getElementById(“alien”).width,
文件.getElementById(“alien”).height);
}

我验证了控制台是否正在登录。

嘿,这不是我最初的问题,但使用您提供的添加代码,
intersects()
永远不会返回true。你知道为什么吗?JSFiddle举例说明:如果您仍然有这个问题,请提出一个新问题。不,现在一切都正常了。你可以看看我的“产品”
for (var i = 0; i < aliens.length; i++) {
        console.log("isCollidingWithAlien");
        return intersects(
        shot.x,
        shot.y,
        shot.img.width,
        shot.img.height,
        aliens[i].x,
        aliens[i].y,
        document.getElementById("alien").width,
        document.getElementById("alien").height);
}