Arrays AS3-包含MovieClips的数组,indexOf
我有这个数组和这些事件处理程序:Arrays AS3-包含MovieClips的数组,indexOf,arrays,flash,actionscript-3,Arrays,Flash,Actionscript 3,我有这个数组和这些事件处理程序: 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对
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)
那么为什么每次跟踪都返回一个未定义的
?你有没有试着追踪电影唇的名字?也许你的MovieClip中有孩子在分派你的活动。尝试设置mouseChildren=false。
使用e.currentTarget,e.target可能是某个子对象。或者像Tobias说的-将mouseChildren设置为false这段代码对我很有用。我恭敬地得到了0,1,2。因此,我在这里假设您“没有”给您的MovieClip按钮提供aBtn、bBtn、cBtn的实例名称
这将是未定义的。 不过,它应该抛出编译时错误。
而且请学会用打字机打你所有的VAR,这只会对你有长远的帮助
var i:int = btnArr.indexOf(e.target);
如果数组找不到元素,它的indexOf应该返回-1
由于您没有定义,您确定btnArr是您以前创建的数组吗?我是否可以更轻松地将整个代码发布到某个地方?按钮是我在舞台上画的符号的实例。我确实跟踪了剪辑名称,但因为我试图获取数组中对象的索引,这似乎对我帮助不大。我曾想到过一个非常棘手的解决方法,但这也不太好。如果将EventListener添加到具有其他DisplayObjects作为Child的MovieClip中,则事件将从它们而不是从符号本身发送。这个事件是“冒泡”。因此,e.target是按钮内的显示对象。这就是为什么indexOf函数返回undefined。使用e.currentTarget,如turbosqel所说。当前目标是您的按钮。将EventHandler添加到的对象。或者将按钮的mouseChildren属性设置为false。我现在已经实现了这两个建议,但恐怕还是没有乐趣。
跟踪(i)
仍然返回未定义的。我还有其他类似的跟踪:trace(e)
trace(e.currentTarget)
输出:[MouseEvent type=“mouseOut”bubbles=true cancelable=false 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]
分别。使用curretTarget似乎已经解决了问题,我现在在跟踪中获得了正确的索引。非常感谢!现在有一个完全无关的问题要处理!我向你保证,如果今晚还没有解决,我将发布它。。。