2010-04-07 24 views
0

Comment puis-je référencer les coordonnées d'un objet d'affichage en fonction de son objet parent ou de son stade dans la classe qui crée l'objet? Essentiellement quand je crée un nouvel objet sprite à partir d'une classe personnalisée et que je l'ajoute à la liste d'affichage, je souhaite inclure du code dans la classe personnalisée qui limite les coordonnées de traînée à la scène ou à une section de la scène. .Limiter les coordonnées de déplacement de l'objet d'affichage dans AS3

//Frame Script 
import Swatch; 

var test:Sprite = new Swatch(); 
addChild(test); 

___________________ 

//Custom Class 
package 
{ 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

public class Swatch extends Sprite 
    { 
    public function Swatch() 
     { 
     init(); 
     } 

    private function init():void 
     { 
     var swatchObject:Sprite = new Sprite(); 

     swatchObject.graphics.beginFill(0x0000FF, 1); 
     swatchObject.graphics.drawRect(100, 100, 150, 150); 
     swatchObject.graphics.endFill(); 

     swatchObject.addEventListener(MouseEvent.MOUSE_DOWN, onDrag, false, 0, true); 
     swatchObject.addEventListener(MouseEvent.MOUSE_UP, onDrop, false, 0, true); 

     this.addChild(swatchObject); 
     } 

    private function onDrag(evt:MouseEvent):void 
     { 
     evt.target.startDrag(); 
     //how to limit it's dragability to the Stage? 

     } 

    private function onDrop(evt:MouseEvent):void 
     { 
     evt.target.stopDrag(); 
     } 
    } 
} 
+0

N'oubliez pas d'écouter l'événement Event.MOUSE_LEAVE (attachez-le 'onDrop'), au cas où l'utilisateur clique sur l'objet et abandonne la scène (bien que cela soit peut-être intégré dans' startDrag() 'fonctionnalité déjà?). Référence: http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#event:mouseLeave – Cameron

Répondre

1

Il existe un support natif pour ce que vous voulez faire. startDrag() accepte un rectangle en tant que paramètre qui limite la région dans laquelle la traînée peut avoir lieu.

function startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void 

espoir qui aide,

Tyler.

+0

ok, donc le deuxième paramètre de startDrag est ce que je cherche. comment puis-je référencer la scène de mon objet? J'ai essayé d'inclure flash.display.Stage, puis trace (this.parent.stage.stageWidth) mais il a donné une erreur. – TheDarkIn1978

+0

tant que vous êtes sur la liste d'affichage, vous pouvez simplement dire "stage.stageWidth", vous n'avez pas besoin de l'importer –

+0

ok je l'ai compris. J'ai dû créer un écouteur d'événement pour ADDED_TO_STAGE dans mon constructeur ciblant la fonction init(), sinon stage était nul quand j'ai essayé de le référencer. oublié de cet écueil. – TheDarkIn1978