2009-11-10 4 views
2

J'ai un fichier flash cs3 dans lequel je veux qu'un masque se déplace sur l'axe y (haut et bas) lorsque l'utilisateur fait défiler la zone de navigation.Comment limiter le curseur suivant à une zone spécifique

Dans mon code, j'ai:

maskMC.startdrag(); Comment limiter la zone de déplacement du masque, puis le ramener à sa position d'origine lorsque l'utilisateur s'éloigne de la zone spécifique (dans ce cas la navigation).

Répondre

2

1) Limitation de la traînée de masque à l'axe Y:

Il suffit d'utiliser le deuxième argument (limites de l'startDrag: rectangle).

// startDrag method details 
startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void 

lui donner un rectangle qu'il devrait utiliser comme ses limites. Des détails et des exemples peuvent être trouvés sur Adobe's livedocs. Par exemple, pour verrouiller glisser seulement l'axe Y, vous devez faire la largeur de votre rectangle égal à 0.

var dragBounds:Rectangle = new Rectangle(startX, startY, 0, dragHeight); 
myMask.startDrag(false, dragBounds); 

2) masque de retour à l'original Y, sur une chute:

Le moyen le plus façon d'écouter l'événement mouseup sur la scène. Lorsque cela se déclenche et que vous faites glisser le masque, réglez le masque y sur son emplacement d'origine. Personnellement, je voudrais utiliser Tweener pour renvoyer le masque, mais vous pouvez le faire comme vous voulez (éventuellement sur enterFrame).

public function Main() 
{ 
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
} 

private function mouseUpHandler(e:MouseEvent):void 
{ 
    if (draggingMask) 
    { 
     Tweener.addTween(myMask, { y:originalY, time:0.5, transition:"easeOutQuad" }); 
     draggingMask = false; 
    } 
} 

Vous devez définir draggingMask true lorsque vous commencez à faire glisser le masque, et false lorsque vous le relâchez. Vous aurez également besoin d'une variable pour stocker l'emplacement d'origine (j'ai utilisé "originalY" dans mon exemple ci-dessus).

0

à utiliser les limites de la traînée, utilisez ce qui suit (sans oublier de import flash.geom.Rectangle;)

startDrag(lockCenter, new Rectangle(leftCornerx, leftCornery, width, height)) 

si vous le voulez pour revenir en arrière sur le déplacement de l'objet de menu vous voulez utiliser soit un MouseEvent.ROLL_OUT ou MouseEvent.MOUSE_MOVE écouteur d'événements et de tester stage.mouseX/stage.mouseY, ou exécuter un hitTest. dépend de comment vous l'avez mis en place sur la scène.

Questions connexes