2010-07-07 7 views
2

Je travaille sur un composant où je dois enregistrer un événement de clic sur un bouton à l'intérieur du moviclip qui est à l'intérieur d'un TileList, quelqu'un peut me diriger dans la bonne direction.ajouter un événement à l'intérieur movieclip TileList en AS3

TileList -> MovieClip -> bouton (i besoin d'enregistrer un événement de clic sur le bouton).

+0

Je suppose que vous avez besoin de cet événement dans la application parente, juste son moteur de rendu? Trop - voulez-vous simuler un clic sur la tuile ou est-ce plus personnalisé? –

Répondre

0

Pour simuler un événement de clic de souris de toute displayObject vous pouvez faire quelque chose comme ceci:

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

Si je vous comprends bien, il semble que tout ce que vous voulez est une poignée à l'movieclip dans votre TileList et de là , vous voulez ajouter un écouteur d'événement.

Il y a plusieurs façons d'obtenir une poignée à l'intérieur de votre movieClip TileList. Tout d'abord, je dirais que vous devriez utiliser un dataProvider along the lines of the example here. Cela servirait de modèle pour votre objet d'affichage. De là, vous pouvez simplement accéder à votre movieclip désiré à partir de la liste comme dans:

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); 
} 

Une autre approche (si vous ne pouvez pas travailler avec le fournisseur de données) serait de tenter votre chance avec ce qui suit Méthodes TileList:

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

et de voir si vous pouvez avoir accès au clip que vous voulez. Si elle était moi, je tester en faisant quelque chose comme:

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'); 
} 

Alors, je continue à essayer différentes choses sur la ligne 1 jusqu'à ce que l'alerte a surgi.

J'espère que cela d'une certaine façon,

--gMale

EDIT: En réponse à votre commentaire ci-dessous, voici un exemple rapide du haut de ma tête vous pourriez jouer avec votre clip et trouver le bouton (il ne peut pas compiler mais vous devriez avoir l'idée). Utilisez ce que si vous ne disposez pas d'une possibilité d'éditer le clip et si le bouton est en fait un fl.controls.Button (par opposition à un bouton 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

Merci pour la réponse, je suis en mesure d'enregistrer un événement de clic pour le clip que j'ai besoin, il y a un enfant (bouton) à l'intérieur du clip, j'ai besoin d'enregistrer un clic même sur le bouton. – pmarreddy

+0

si vous avez le contrôle sur le clip, puis le modifier si l'élément dont vous avez besoin est un nom d'instance. Ensuite, vous pouvez référencer facilement comme dans * myClip.myButton.addEventListener (MouseEvent.CLICK, onClick) *. Si vous ne disposez pas de contrôle du clip, vous pouvez l'utiliser est la liste des enfants d'avoir accès au bouton comme dans * myClip.getChildAt (0) *. Vous pouvez jouer et déterminer quel enfant est votre bouton. Je vais écrire un exemple de code dans ma réponse. – gMale