2016-11-29 30 views
0

从我的朋友告诉我,这应该是工作,但事实并非如此。使用数组和hitTest - AS3

var P2hb:Array = new Array(P2char1, P2char2, P2char3); 
var P2life:Number = 0; 

addEventListener(Event.ENTER_FRAME, framecheck) 
function framecheck(event:Event):void 
{ 
if (P2hb.hitTestObject(P1attack)) { P2life-=2; } 
} 

这是一个通用的代码,但它与我所拥有的一样。基本上, P2hb中的所有元素均为舞台上的动画片段。 我想说,如果P1attack命中数组中的任何对象,那么P2life将减少2,而不必为每个单独的对象输入hitTestObject()
我似乎无法得到它的工作。谁能告诉我我做错了什么?
预先感谢您。

+0

的'P2hb'是一个'Array'其中没有'hitTestObject()'方法!你最可能的意思就是:'ifh'语句标准的'P2hb [0] .hitTestObject(P1attack)'! – someOne

+0

...,你想做什么?! – someOne

+0

如何让[0]等于所有三个对象? – Koden

回答

1

简单地说,通过阵列(使用for环,例如)在每个单独的“动画片段”循环,并检查其对您的其他物体的碰撞:

function framecheck(event:Event):void 
{ 
    for each (var enemy in P2hb) { 
     if (enemy.hitTestObject(P1attack)) { 
      P2life-=2; 
      trace("hit occurred! P2life: "+P2life); 
     } 
    } 
} 
+0

这将检查同一帧中的所有动画片段吗?或逐帧检查每个影片剪辑?想要检查一个帧中的所有剪辑 – Koden

+0

我试过这个代码,它只触发数组中的第二个项目 – Koden

+0

@Koden既然,你已经将'framecheck()'函数注册为'ENTER_FRAME'处理程序,那么_all_函数中的代码将在_once_执行,而“播放头”进入_每个frame_ :) – someOne