2009-04-27 12 views
0

Je veux charger une image à l'aide de Loader, puis je veux la faire glisser. Le chargement se fait en sélectionnant à partir de la liste comme indiqué ci-dessous, mais je n'ai aucune idée de faire glisser et déposer dans AS3, quelqu'un peut-il m'aider? Je veux le rendre aussi simple que possible.Faire une image chargée draggable actionscript 3

Voici mon code pour charger l'image:

var charge1:Loader = new Loader(); 
addChild(charge1); 
this.addChildAt(charge1, getChildIndex(bg)); 
charge1.x = 280; 
charge1.y = 270; 

... 

function setCharge1(e:Event):void{ 
    trace(e.target.selectedItem.source); 

    this.charge1.load(new URLRequest(e.target.selectedItem.source));  
    this.charge1.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); 
} 

Répondre

2

yuku allait dans le bon sens, mais ce que vous voulez faire est d'obtenir le contenu du loaderInfo qui est en fait le clip qui est chargé dans quelque chose comme

private function onComplete(event : Event) : void 
{ 
    var loadedClip : MovieClip = LoaderInfo(event.target).content; 

    loadedClip.addEventListener(MouseEvent.MOUSE_DOWN, function(event : MouseEvent) 
    { 
    loadedClip.startDrag(); 
    }); 

    stage.addEventListener(MouseEvent.MOUSE_UP, function(event : MouseEvent) 
    { 
     loadedClip.stopDrag(); 
    }); 

} 
.
+2

hmmm, semble avoir du sens, mais cela me donne une erreur, car le contenu du chargeur n'est pas un clip, mais un bitmap. Puis-je le convertir en quelque sorte? Et s'il vous plaît corriger le leftparen redondant avant MouseEvent.MOUSE_UP, juste pour ne pas confondre quelqu'un;) – Dungeo

+1

Si c'est la base alors vous pouvez dessiner ce bitmap sur un MovieClip en utilisant la propriété Sprite.graphics et en utilisant la méthode Graphics.beginBitmapFill() http : //livedocs.adobe.com/flex/3/langref/index.html –

+0

Je pense que j'ai compris, mais je ne suis pas sûr de savoir comment le joindre avec loader, pourriez-vous m'expliquer plus précisément? Désolé, je suis un débutant :-) – Dungeo

0

Loader est une sous-classe de Sprite, de sorte que vous pouvez utiliser la méthode startDrag et stopDrag.

Par exemple:

charge1.addEventListener("mouseDown", function() { 
    charge1.startDrag(); 
}); 

stage.addEventListener("mouseUp", function() { 
    charge1.stopDrag(); 
}); 
+0

im peur que ce n'est pas, en raison de la documentation Adobe Héritage: \t Loader -> DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Objet et votre code me donne ceci: Erreur # 1069: Propriété stopDrag introuvable sur flash.display.Loader et il n'y a pas de valeur par défaut. – Dungeo

+0

Désolé, j'étais confus entre DisplayObject et Sprite. J'espère que la réponse de James Hay vous aide :) – yuku

1

Utilisez le code suivant:

this.addEventListener(MouseEvent.MOUSE_DOWN, dragMovie); 
this.addEventListener(MouseEvent.MOUSE_UP, dropMovie); 
this.buttonMode = true; 
private function dragMovie(event:MouseEvent):void 
{ 
    this.startDrag(); 
} 

private function dropMovie(event:MouseEvent):void 
{ 
    this.stopDrag(); 
} 
2

Ceci est la meilleure façon de me ...

/* Load Image */ 

var myLoader:Loader = new Loader(); 
imageContainer.addChild(myLoader); 
var url:URLRequest = new URLRequest("photo.jpg"); 
myLoader.load(url); 

/* Drag and Drop */ 

imageContainer.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
function pickUp(event:MouseEvent):void 
{ 
imageContainer.startDrag(); 
} 
stage.addEventListener(MouseEvent.MOUSE_UP, dopIt); 

function dopIt(event:MouseEvent):void 
{ 
imageContainer.stopDrag(); 
}