2012-02-18 65 views
0

我正在制作塔防游戏,并且已经达到了我的塔以适当间隔发射子弹的程度。但我需要能够删除影片剪辑。例如,如果一座塔子射出一颗子弹,它会制作一个子弹动画片段的副本,这个副本旨在复制特定的敌人。但是,我无法弄清楚如何配置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; 
} 

这是它增加了圆圈的对象的代码。

回答

0

您可以保留一个包含所有想要测试的影片剪辑的数组,然后遍历该数组并检查每个影片剪辑。所以,无论何时将其添加到屏幕上,都将其添加到该数组中。然后,当你想测试时,测试该阵列中的每个人。如果要删除它,请将其从阵列和屏幕中删除。

编辑

以下是我认为在这种情况下做的......

function dupeCircle() 
{  
    //trace("Dupe circle initiated"); 
    bulletArray.push(duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount)); 
    circleCount += 1; 
} 

基本上只是存储阵列中的实际影片剪辑,然后你可以做你试图去做bulletArray[index].hitTest,它应该有希望工作。 (做同样的事情,你存储实际的影片剪辑为其他阵列也)

+0

我想到了,但我该如何管理何时检查它?如果我在屏幕上有30个敌人和30发子弹,每个实例是否应该不断检查?或者更好的方法是为每个子弹和每个敌人都堆叠一个“每个”阵列,这个阵列贯穿所有阵列;并且每秒都有一次检查? – Nick 2012-02-18 15:51:47

+0

那么有很多不同的方法可以用来检查。做一个游戏时我喜欢做的一件事就是创建一个“主循环”,因为我习惯于C++并且总是有一个主循环。我不知道这是否是在Flash中最好的方式,但我这样做并没有任何问题。我认为计时器是实现这个循环的好方法。你添加的代码看起来是正确的想法。不知道为什么它没有击中。尝试在你调用该函数的地方发布代码(事件监听器部分),以及向阵列添加敌人和子弹的位置。 – 2012-02-18 21:38:26

+0

我检查并通过故障排除发现它识别数组中的对象。例如,我可以使用removeMovieClip(enemiesArray [yy])使敌人离开舞台,但我无法访问任何方法或属性的动画片段。我认为这是我的问题,因为我正在使用movieclip上的hitTest函数。是否有某些原因导致我无法访问这些属性? 编辑:他们都提出了undefined – Nick 2012-02-18 21:43:51

0

您从bulletArray除去2次:

 bulletArray.splice(zz,1); 
     bulletArray.splice(yy,1); 

最后一个应该是敌人去除我猜。也许这会在您以后尝试移除已经从舞台上移除的敌人时引发错误?

+0

如果我先拼接,然后当我尝试删除它时,它会删除错误的对象,我相信 – Nick 2012-02-18 23:51:20

+0

我的意思是你要去掉子弹2次,而不是将敌人从敌人身上移开阵列。如果最后一行不是enemiesArray.splice(yy,1)而不是bulletArray.splice(yy,1);? – Ixx 2012-02-18 23:55:04

+0

谢谢。我错过了,但我不认为这是造成问题的原因。 – Nick 2012-02-18 23:58:48

相关问题