2014-06-13 4 views
0

J'ai donc fait une fonction de balayage qui permet à l'utilisateur de faire défiler les menus du haut de l'écran et du côté de l'écran (Note: Il y a des flèches sur les côtés l'écran que l'utilisateur est en train de glisser pour faire glisser le menu dans). Maintenant, tout fonctionne très bien, mais pour une chose ... Le menu ne fonctionnera qu'avec le .stage dans les auditeurs de l'événement. Ce ne serait pas un problème mais j'ai des écrans qui utilisent également une fonction de balayage pour changer ce qui est sur l'écran. Mais la chose étrange est que les écrans utilisant la fonction de balayage n'ont pas besoin de l'écouteur .stage. Ci-dessous, je vais poster les auditeurs de l'événement, j'ai été coincé sur cela pendant quelques jours ne me suffit pas de savoir pourquoi il le fait.AS3: Fonction de balayage agissant

//Side Menu Swipe 
smenu_mc.stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); 

//Top Menu Swipe 
tmenu_mc.stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, downSwipe); 

//Screens Swipe 
Games.addEventListener(TransformGestureEvent.GESTURE_SWIPE, lrSwipe); 
+0

Je ne suis pas sûr de qui est downvoting sans commentaire pourquoi, mais comme indiqué dans votre autre question, il ne s'agit pas de la scène, mais de se concentrer. il est difficile pour vos menus de recevoir la mise au point lorsqu'ils sont hors de l'écran afin d'ajouter l'auditeur à la scène. – BadFeelingAboutThis

+0

De plus, il ne sert à rien d'ajouter des programmes d'écoute à deux étages - avec le code affiché, chaque fois qu'il y a UN balayage, vous allez appeler à la fois 'onSwipe' et' downSwipe'. – BadFeelingAboutThis

Répondre

0

Ce que vous pouvez faire, est en swipes qui se produire sur le dessus d'un objet d'affichage (comme presumable votre objet Games), vous pouvez écouter avec une priorité plus élevée et d'annuler l'événement.

Games.addEventListener(TransformGestureEvent.GESTURE_SWIPE, lrSwipe, false, 999); //the fourth parameter is the priority of the listener, when there are multiple event listeners for the same event, the listener with the higher number priority will be run first 

function lrSwipe(e:TransformGestureEvent):void { 
    e.stopImmediatePropagation(); //this make the event stop and not trigger other listeners after this one 

    //...rest of your code 
} 

Encore une fois (comme démontré dans ma réponse à votre autre question), vous n'allez avoir plusieurs auditeurs pour un événement swipe scène. Avec le code que vous avez posté, lorsque l'utilisateur balaie l'écran Games, les trois fonctions (lrSwipe, puis downSwipe puis onSwipe) seront appelées en même temps.

+0

Merci! Cela a réglé le problème sur cet écran, mais une fois que je quitte l'écran, le menu latéral et le menu supérieur ne seront pas effacés. Une idée pourquoi? – Klye

+0

Eh bien, ça marche comme ça. Si vous faites le menu latéral ou supérieur avant de faire le lrSwipe, le lrSwipe ne fonctionnera pas. Et inversement – Klye

+0

Retirez-vous l'écouteur lrSwipe lorsque vous quittez l'écran? Il ne peut plus être visible mais reste concentré. – BadFeelingAboutThis