2010-08-11 3 views
0

Je dois faire glisser un objet (dragable?) Désolé si ma terminologie n'est pas correcte!J'ai une classe AS3 qui étend movieClip avec une image dynamique, comment rendre cette image glisser?

J'ai une classe où je vais stocker variable et faire des calculs:

package Classes 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 

    public class PrintItem extends MovieClip 
    {  
     public var imageLoader:Loader; 

     public function PrintItem() 
     { 

     } 

     public function loadImage(url:String):void 
     { 
      imageLoader = new Loader(); 
      imageLoader.load(new URLRequest(url)); 
     } 
    } 
} 

Je crée une nouvelle instance de la classe, je le passe une URL dans loadImage et je l'ajouter à la toile comme ceci:

var myItem:PrintItem = new PrintItem(); 
myItem.loadImage("pic.jpg"); 
this.addChild(myItem.imageLoader); 
myItem.imageLoader.x = 50; 
myItem.imageLoader.y = 50; 
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_UP, dropIt); 

Mais là, je suis coincé. Je dois faire glisser cet élément et écrire les fonctions pickUp et dropIt. event.target.startDrag (faux); ne fonctionne pas (Loader n'est pas déplaçable) et event.target.parent.startDrag (false); ne fonctionne pas car toute la scène devient traçable! AIDEZ-MOI! Est-ce parce que seul le chargeur est ajouté à la scène?

Répondre

0

Ok. Je sais que cela ne fait que quelques minutes, mais j'ai trouvé la réponse. L'écrire ici l'a éclairci dans ma tête. Voici ce qui a fonctionné pour moi au cas où il aide quelqu'un d'autre:

D'abord, j'ajouté l'image du chargeur comme un enfant à la classe comme ceci:

public function loadImage(url:String):void 
{ 
    imageLoader = new Loader(); 
    imageLoader.load(new URLRequest(url)); 
    this.addChild(imageLoader); // IMPORTANT! 
    this.mouseChildren = false; 
    this.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
    this.addEventListener(MouseEvent.MOUSE_UP, dropIt); 
} 

Et puis je ne dû ajouter la classe à la stade, pas le chargeur:

this.addChild(myItem); 

Retour à la classe, j'ajouté:

public function pickUp(event:MouseEvent):void 
{ 
    trace("Pickup"); 
    this.startDrag(false); 
} 
public function dropIt(event:MouseEvent):void 
{ 
    this.stopDrag(); 
    trace("X = " + event.target.x + " Y = " + event.target.y); // Just to help me 
} 

Et le tour est joué ! Ça a marché!

+0

vous trouverez qu'il y aura un problème si vous faites glisser rapidement et relâcher, ce dropIt ne sera pas déclenché depuis que vous avez libéré l'imageLoader. Pour résoudre ce problème, l'écouteur de dropIt devrait écouter au niveau de la scène. Il devrait le faire dans votre fonction PickUp. N'oubliez pas de l'enlever de votre fonction dropIt. – Allan

Questions connexes