добавить событие в мувиклип внутри списка листов в as3 - PullRequest
2 голосов
/ 07 июля 2010

Я работаю над компонентом, в котором мне нужно зарегистрировать событие нажатия на кнопку внутри Moviclip, которая находится внутри списка листов, может кто-нибудь указать мне правильное направление.

Tilelist -> movieclip -> button (мне нужно зарегистрировать событие нажатия на кнопку).

Ответы [ 2 ]

2 голосов
/ 10 июля 2010

Если я вас правильно понимаю, кажется, все, что вам нужно, это дескриптор мувиклипа внутри вашего tileList и оттуда вы хотите добавить прослушиватель событий.

Есть много способов получить указатель для мувиклипа в вашем тайле. Во-первых, я бы сказал, что вы должны использовать dataProvider в соответствии с приведенным здесь примером . Это послужит моделью для вашего экранного объекта. Оттуда вы можете просто получить доступ к желаемому мувиклипу из списка, как в:

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');   
0 голосов
/ 08 июля 2010

Для имитации события щелчка мыши с любого объекта displayObject вы можете сделать что-то вроде этого:

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