我正在开发一个组件,我需要在moviclip内的一个按钮上注册一个click事件,该按钮位于一个tilelist中,有人可以指向正确的方向。
Tilelist - > movieclip - >按钮(我需要在按钮上注册点击事件)。
答案 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));