用于冲突检测的setInterval内循环的JavaScript?
我目前正在用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似乎并不喜欢它。例如,我将以下代码作为我的
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;ifor.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);
}