我正在制作塔防游戏,并且已经达到了我的塔以适当间隔发射子弹的程度。但我需要能够删除影片剪辑。例如,如果一座塔子射出一颗子弹,它会制作一个子弹动画片段的副本,这个副本旨在复制特定的敌人。但是,我无法弄清楚如何配置hitTest。有没有什么办法可以让hittest检查从特定对象复制的所有儿童影片剪辑?如何击中所有动画片段的实例 - ACTIONSCRIPT 2
编辑:我添加了这个功能,每秒执行一次。但由于某种原因,它不能确认命中。
function checkHits(){//checks for hits between enemies and bullets
for (var zz = 0; zz < bulletArray.length; zz += 1)//checks for each bullet
{
for(var yy=0;yy<enemiesArray.length;yy+=1){//checks for each enemy
trace("enemies loc"+yy+":"+enemiesArray[yy]);
trace("bullet loc"+zz+":"+bulletArray[zz]);
if(bulletArray[zz].hitTest(enemiesArray[yy])){
trace("HIT!");
removeMovieClip(bulletArray[zz]);
removeMovieClip(enemiesArray[yy]);
bulletArray.splice(zz,1);
bulletArray.splice(yy,1);
}//end if
}//end for
}//end for
}
function dupeCircle()
{
//trace("Dupe circle initiated");
duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount);
bulletArray.push("circle" + circleCount);
trace(bulletArray[0]._width);
circleCount += 1;
}
这是它增加了圆圈的对象的代码。
我想到了,但我该如何管理何时检查它?如果我在屏幕上有30个敌人和30发子弹,每个实例是否应该不断检查?或者更好的方法是为每个子弹和每个敌人都堆叠一个“每个”阵列,这个阵列贯穿所有阵列;并且每秒都有一次检查? – Nick 2012-02-18 15:51:47
那么有很多不同的方法可以用来检查。做一个游戏时我喜欢做的一件事就是创建一个“主循环”,因为我习惯于C++并且总是有一个主循环。我不知道这是否是在Flash中最好的方式,但我这样做并没有任何问题。我认为计时器是实现这个循环的好方法。你添加的代码看起来是正确的想法。不知道为什么它没有击中。尝试在你调用该函数的地方发布代码(事件监听器部分),以及向阵列添加敌人和子弹的位置。 – 2012-02-18 21:38:26
我检查并通过故障排除发现它识别数组中的对象。例如,我可以使用removeMovieClip(enemiesArray [yy])使敌人离开舞台,但我无法访问任何方法或属性的动画片段。我认为这是我的问题,因为我正在使用movieclip上的hitTest函数。是否有某些原因导致我无法访问这些属性? 编辑:他们都提出了undefined – Nick 2012-02-18 21:43:51