Apprendre à créer des MouseEvent.CLIQUEZ sur l'événement en AS3 (passer des paramètres à la fonction)?
Cette question ne concerne pas seulement à MouseEvent.CLIQUEZ sur type d'événement, mais à tous les types d'événements qui existent déjà en AS3. J'ai lu beaucoup de choses sur les événements personnalisés mais jusqu'à présent, je ne pouvais pas comprendre comment faire ce que je veux faire. Je vais essayer de l'expliquer, j'espère que vous comprenez:
Ici est une illustration de ma situation:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
Mais je veux être en mesure de passer à someVar en tant que paramètre à doSomething. J'ai donc essayé ceci:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
Ce genre de travaux, mais pas comme je l'attends. En raison de la fonction de fermeture, lorsque le MouseEvent.CLIQUEZ sur événements sont effectivement tiré la pour boucle est déjà plus someVar est tenue la dernière valeur, le nombre 9 dans l'exemple. Donc, à chaque clic dans chaque clip d'appel doSomething passant 9 en tant que paramètre. Et ce n'est pas ce que je veux.
J'ai pensé que créer un événement personnalisé devrait fonctionner, mais alors je ne pouvais pas trouver un moyen de déclencher un événement personnalisé lors de la MouseEvent.CLIQUEZ sur l'événement est déclenché et transmettre le paramètre. Maintenant, je ne sais pas si c'est la bonne réponse.
Que dois-je faire et comment?
OriginalL'auteur fromvega | 2009-01-08
Vous devez vous connecter pour publier un commentaire.
Sans en savoir plus sur votre demande, il semble plus que vous devez utiliser la cible pour passer des paramètres, ou de prolonger MouseEvent. L'ancien serait plus conforme à la pratique courante, bien que. Ainsi, par exemple, si vous avez exposé un nombre entier de propriété publique sur "clip" de l'objet (quel qu'il soit):
... et puis, dans votre écouteur d'événement, vous pouvez récupérer cette propriété en utilisant soit la cible ou de la propriété currentTarget de l'événement (probablement currentTarget, dans votre cas):
Qui devrait le faire! Bonne chance.
OriginalL'auteur Christian Nunciato
Vous avez vraiment besoin d'étendre la classe d'événement pour créer votre propre événement avec des paramètres supplémentaires. Placer les fonctions à l'intérieur de la méthode addEventListener (fonctions anonymes) est une recette pour les fuites de mémoire, qui n'est pas bon.
Jetez un oeil à la suivante.
lorsque vous créez un nouvel événement comme
vous pouvez ensuite écouter pour que l'événement de ce
et à l'intérieur de la fonction " listenerFunction de l'événement.parameterText contiendra votre paramètre.
donc à l'intérieur de votre myClips composant d'incendie à l'événement personnalisé et écouter pour que l'événement, et non l'événement Click.
vous n'avez pas de référence à la fonction, qui, combinée avec la weakReference dans l'eventListener défaut à false, il est possible si vous n'êtes pas prudent de conduire à des fuites de mémoire. considéré comme une mauvaise pratique + tout flashplayer 9.115 ou ci-dessous a un bug qui provoque une fuite de mémoire pour anon funcs.
Cela n'explique toujours pas comment je pourrais le feu/la dépêche de cet événement personnalisé lorsqu'un MouseEvent.CLIQUEZ sur un événement se produit. Ai-je raté quelque chose?
Votre question est un peu vauge là, vous vous posez au sujet des événements personnalisés, c'est ce que j'ai essayé d'expliquer. avec eux, vous pouvez ajouter ce que les paramètres que vous souhaitez. Si vous souhaitez feu de l'événement personnalisé lorsque l'utilisateur clique sur votre composant, il suffit d'utiliser la dispatchEvent code à l'intérieur de la cliquez sur gestionnaire de composant.
OriginalL'auteur kenneth
Profiter de la dynamique en fonction de la construction en AS3.
Merci, très très utile!
OriginalL'auteur Matt W
Vous pouvez accomplir ceci en obtenant votre gestionnaire d'une fonction qui donne la variable de fermeture, comme ceci:
Également, pour laquelle il crée une nouvelle fermeture, vous pourriez vouloir vérifier l'explication dans la accepté de répondre à cette question similaire.
OriginalL'auteur fenomas
Merci beaucoup pour ces conseils utiles, cette technique est de mieux comprendre que les classes explication.
pour moi je viens de commencer un nouveau code de l'algorithme à l'aide de cette technique pour résoudre relation de lien entre les minuteries tableau et les vues de tableau, et de mettre à jour le statut de modifier le texte à l'intérieur d'eux fréquemment, en passant par les ID avec des minuteries événements.
comme ceci:
OriginalL'auteur Tareq Battat
Je vois votre objectif principal n'est pas de créer un personnalisé MouseEvent.CLIQUEZ sur, mais pour passer un paramètre à la fonction. Vous n'avez pas besoin d'située dans un endroit compliqué de créer ou d'étendre quoi que ce soit. Il y a un simple et la fermeture de la difficulté pour le faire.
Suffit de faire votre fonction comme ceci:
Cette technique peut se rapporter à tout AS3 type d'événement vous pouvez utiliser la méthode addEventListener.
Et maintenant vous pouvez l'ajouter comme ceci:
La
doSomething(someVar)
peut être utilisé directement suraddEventListener()
, mais il est préférable de les conserver dans une variable parce que vous serez en mesure de le retirer plus tard la même manière que vous l'avez ajouté:Couramment utilisés
e.currentTarget.someCustomProperty
fonctionne pour les objets dynamiques (c'est à dire MovieClip), mais je vous laisserai en bas à autre chose (c'est à dire Sprite), vous forçant à construire un ensemble personnalisé étendue de l'objet/événement pour chaque type.Cette solution traite de tous les "écoutable" de l'objet et de l'événement. Et cette réponse a plus de détails et d'exemples.
OriginalL'auteur