用于碰撞检测的setInterval内部的JavaScript for循环?

时间:2014-03-14 18:49:53

标签: javascript canvas for-loop collision-detection setinterval

我目前正在用JavaScript重拍太空入侵者,而且我的动画效果一直非常好,直到现在。

您看到我有Object名为Alien,其中包含一个外国人数据。每次创建外星人时,它都会被添加到外星人阵列中,分别名为aliens。我还有一个名为Object的{​​{1}},其中包含来自玩家Shot的信息。 Shot自行调用Shot方法,允许它更新并自动向上移动屏幕。我认为进行碰撞检测调用的最佳位置就在这里,因为我可以访问相关的变量。

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

setInterval

虽然接近尾声的代码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 } }; 似乎永远不会被运行,因为我已使用不同的if(isCollidingWithAlien(shot))...语句多次测试过。

你知道为什么它没有被运行/如何解决这个问题吗?

以下是console.log代码:

isCollidingWithAlien

这是碰撞检测代码:

var isCollidingWithAlien = function(shot){
    for(var i = 0; i < aliens; i++){
        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);
    }
};   

这是一个 JSFiddle ,可以看到它的全部内容: JSFiddle Link

1 个答案:

答案 0 :(得分:1)

你的陈述是破碎的。

aliens替换为aliens.length

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);
}

我确认控制台正在登录。