2010-09-08 6 views
1

J'ai un code ActionScript 3.0 intégré. Ce code contrôle un certain nombre d'éléments sur sa scène. Ces éléments ont chacun un événement Over, Out et Click.ActionScript 3.0 - Déclarations d'écouteurs d'événements alternatifs?

Je définissent actuellement ces écouteurs d'événements comme si:

mc_hotspot.addEventListener(MouseEvent.MOUSE_OVER, lift); 
mc_hotspot.addEventListener(MouseEvent.MOUSE_OUT, setDown); 
mc_hotspot.addEventListener(MouseEvent.CLICK, select);; 
mc_spinspot.addEventListener(MouseEvent.MOUSE_OVER, spinspotOver); 
mc_spinspot.addEventListener(MouseEvent.MOUSE_OUT, spinspotOut); 
mc_spinspot.addEventListener(MouseEvent.CLICK, spinClick); 
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OVER, spinspot2Over); 
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OUT, spinspot2Out); 
mc_spinspot2.addEventListener(MouseEvent.CLICK, spin2Click); 
btn_back.addEventListener(MouseEvent.MOUSE_OVER, backOver); 
btn_back.addEventListener(MouseEvent.MOUSE_OUT, backOut); 
btn_back.addEventListener(MouseEvent.CLICK, backClick); 

Comme vous pouvez le voir, c'est une façon très longue et alambiquée de définir les événements de ces éléments et il y a aussi un événement déclenché la fonction d'aller avec chacun d'eux.

Je vais bientôt élargir le projet pour ajouter trois spinspots supplémentaires et un ou deux boutons de plus et je me demandais s'il y avait un autre moyen de définir et de gérer ces événements. Dans le cas des spinspots, tous les événements over et out sont identiques, mais chacun a sa propre fonction dupliquée et son propre écouteur.

Merci à l'avance

Répondre

2

Vous pouvez simplement construire une fonction comme:

function addButtonEvents(mc:*,over:Function,out:Function,click:Function = null) { 
    mc.addEventListener(MouseEvent.MOUSE_OVER,over,false,0,true); 
    mc.addEventListener(MouseEvent.MOUSE_OUT,out,false,0,true); 

    //if we have an optional click event 
    if (click != null) 
     mc.addEventListener(MouseEvent.CLICK,click,false,0,true); 

} 

vous pouvez ajouter tous les trois événements en un seul appel par exemple

addButtonEvents(mc_spinspot, spinspotOver, spinspotOut, spinClick); 
1

meilleure façon est par encapsulation, Habituellement, les états over et out affectent uniquement l'élément qui est en train de se terminer, vous pouvez donc créer une classe spinspot et y ajouter des gestionnaires over et out. la classe parente.

sinon vous pouvez avoir un gestionnaire de sur, de sortie et de clic, puis trier l'action par cible de l'événement (if (ev.target == mc_spinspot)), etc. en faisant cela, vous pouvez également avoir une fonction assignEvents qui donne le sur, le variable transmise

private function addEvents(obj:Sprite){ 
    obj.addEventListener(MouseEvent.MOUSE_OVER, overHandler); 
    obj.addEventListener(MouseEvent.MOUSE_OUT, outHandler); 
    obj.addEventListener(MouseEvent.CLICK, clickHandler); 

} 
addEvents(mc_spinspot);