我目前正在用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
答案 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);
}
我确认控制台正在登录。