将事件添加到as3中tilelist内的movieclip

时间:2010-07-07 18:11:55

标签: flash actionscript-3 flash-cs3

我正在开发一个组件,我需要在moviclip内的一个按钮上注册一个click事件,该按钮位于一个tilelist中,有人可以指向正确的方向。

Tilelist - > movieclip - >按钮(我需要在按钮上注册点击事件)。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您似乎只需要处理tileList中的movieclip,就可以从那里添加事件监听器。

有很多方法可以获取tileList中movieClip的句柄。首先,我要说你应该使用dataProvider along the lines of the example here。这将作为显示对象的模型。从那里,您可以从列表中访问所需的动画片段,如下所示:

import fl.controls.TileList;
import fl.data.DataProvider;

var dp:DataProvider = new DataProvider();
dp.addItem(moviClip1);
dp.addItem(moviClip2);
dp.addItem(moviClip3);
dp.addItem(moviClip4);

var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
addChild(myTileList);

...

//sometime later in the code
//this adds a listener to movieClip3
dp.getItemAt(3).addEventListener(MouseEvent.CLICK, onClick);

...

//or
for (var mc in dp.toArray()) {
    (mc as DisplayObject).addEventListener(MouseEvent.CLICK, onClick);
}

另一种方法(如果您无法使用数据提供程序)将尝试使用以下TileList方法:

getChildAt(index:int):DisplayObject
getChildByName(name:String):DisplayObject
getChildIndex(child:DisplayObject):int  
getItemAt(index:uint):Object

并查看您是否可以访问所需的剪辑。如果是我,我会做类似的测试:

var mc:MovieClip = myTileList.getChildAt(1) as MovieClip;
if(mc != null) mc.addEventListener(MouseEvent.CLICK, doSomethingWhenClicked);

public void function doSomethingWhenClicked(event:MouseEvent):void {
    Alert.show('click!', 'click');
}

然后,我会继续在第1行尝试不同的事情,直到警报弹出。

我希望在某种程度上有所帮助,

- gMale

编辑:在回复下面的评论时,这里有一个快速的例子,你可能会玩你的剪辑并找到按钮(它可能无法编译,但你应该明白)。仅当您无法编辑剪辑并且其按钮实际上是fl.controls.Button(而不是MovieClip按钮)时才使用此选项:

import fl.controls.Button;

var buttonsFound:Integer = 0;

//assume mytiledClip points to your clip that has the button on it
for(var i=0; i < myTiledClip.numChildren; i++) {
    var button:Button = myTiledClip.getChildAt(i) as Button;
    if(button != null){
        Alert.show('Button Found at index:' + i, 'Button Found');
        buttonsFound++;
    }
}
Alert.show('Number of buttons found: ' + buttonsFound, 'Search Complete');   

答案 1 :(得分:0)

要从任何displayObject模拟鼠标单击事件,您可以执行以下操作:

targetMC.dispatchEvent(new MouseEvent(MouseEvent.CLICK));