2011-10-25 39 views
0

我有这样的阵列和这些事件处理程序:AS3 - 包含数组影片剪辑,的indexOf

var btnArr:Array = new Array(aBtn, bBtn, cBtn); 
aBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 
bBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 
cBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 

凡aBtn,bBtn和cBtn是MovieClip对象。

当我尝试,并得到一个事件中的其中之一的指标,:

function blah(e:Event) { 
    var i = btnArr.indexOf(e.target); 
    trace(i) 

那么,为什么这个跟踪返回undefined每一次?

回答

1

使用e.currentTarget,e.target可能是某个孩子。或者像Tobias说的那样 - 将mouseChildren设置为false

+0

我现在已经实施了这两个建议,恐怕还是没有喜悦。 'trace(i)'仍然会返回'undefined'。 我也有其他痕迹这样的: '跟踪(e)中'' 迹(e.currentTarget)' 哪个输出:'[的MouseEvent类型= “鼠标移出” 气泡=真或取消=假的EventPhase = 2 localX = -4 localY = -14 stageX = 103.45 stageY = 35.95 relatedObject = null ctrlKey = false altKey = false shiftKey = false buttonDown = false delta = 0]'和 '[object MovieClip]'。 – rbrtl

+0

使用curretTarget似乎已经解决了这个问题,现在我在跟踪中找到了正确的索引。非常感谢!现在有一个完全无关的问题来处理!我向你保证,如果今晚没有解决,我会发布它... – rbrtl

0

你在哪里初始化按钮?您是否尝试追踪MovieClip名称?也许你的MovieClip有孩子分派你的活动。尝试设置mouseChildren = false.

+0

对于我来说,将我的整个代码发布到某处会更容易吗?这些按钮是我在舞台上绘制的符号的实例。我确实跟踪了剪辑名称,但是因为我试图获取数组中对象的索引,这似乎没有多大帮助。我曾想过一个非常粘性的解决方法,但是这样做也不太好。 – rbrtl

+0

如果您将EventListener添加到将其他DisplayObject作为子项的MovieClip中,则事件将从它们派发,而不是从您的符号本身派发。事件是“冒泡”。所以e.target是Button中的DisplayObject。这就是为什么你的indexOf函数返回undefined。像turbosqel所说的使用e.currentTarget。 currentTarget是你的按钮。您添加了EventHandler的对象。或者将你的按钮的mouseChildren属性设置为false。 –

0

此代码适用于我。我尊敬地得到0,1,2。
所以我会假设你没有给你的MovieClip按钮的实例名称aBtn,bBtn,cBtn
这将是未定义的。 虽然,它应该会引发编译时错误。

而且请学会打字投所有的变数,它只会帮你长期。

var i:int = btnArr.indexOf(e.target); 
0

如果数组的indexOf找不到该元素,则返回-1。

既然你没有定义,你确定btnArr是你之前创建的数组吗?