Comunidad de diseño web y desarrollo en internet online

Arrastrar imagen cargada con Loader

Citar            
MensajeEscrito el 22 Nov 2007 09:41 am
Hola, ¿cómo se puede arrastrar una imagen que ha sido cargada con Loader?
En teoría debería hacerlo así:

Código :

var imagenPrueba:CargaImagenArrastable = new CargaImagenArrastable("imagen.jpg", 50, 50);
imagenPrueba.addEventListener(MouseEvent.MOUSE_DOWN, coger);
imagenPrueba.addEventListener(MouseEvent.MOUSE_UP, soltar);
stage.addChild(imagenPrueba);
function coger(event:MouseEvent):void {
   event.target.startDrag();
}
function soltar(event:MouseEvent):void {
   event.target.stopDrag();
}


Siendo la clase "CargaImagenArrastable" la siguiente:

Código :

package {
  import flash.display.*;
  import flash.text.*;
  import flash.net.URLRequest;
  import flash.events.*;

  public class CargaImagenArrastable extends Sprite {
   private var _ancho:int;
   private var _alto:int;
   private var _loader:Loader;
   public function CargaImagenArrastable(fichero:String, ancho:int, alto:int) {
     _ancho = ancho;
     _alto = alto;
     _loader = new Loader();
      _loader.contentLoaderInfo.addEventListener( Event.OPEN, handleOpen );
      _loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, handleProgress );
      _loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
      _loader.load( new URLRequest( fichero ) );
    }
    private function handleOpen( event:Event ):void {
    }
    private function handleProgress( event:ProgressEvent ):void {
    }
    private function handleComplete( event:Event ):void {
      var image:Bitmap = Bitmap(_loader.content);
      if (_ancho != 0) image.width=_ancho;
      if (_alto != 0) image.height=_alto;
       this.addChild( _loader );
    }
  }
}

Pero cuando "pincho" sobre la imagen, en realidad pincho sobre una instancia de Loader, y esta clase no tiene los métodos startDrag y stopDrag.
¿Cómo podría solucionarlo?
Muchas Gracias

Por jlsandoval

29 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Nov 2007 06:30 pm
Hola, creo que lo que ocurre es que estas intentando arrastrar directamente la instancia del objeto Loader, y eso me parece que no es posible. Prueba metiendo la imagen dentro de un objeto arrastrable como por ejemplo un Sprite:

Código :

var sForma:Sprite = new Sprite();
addChild(sForma);
var ciaImagPrueba:CargaImagenArrastrable = new CargaImagenArrastrable("news.jpg", 50, 50);
sForma.addChild(ciaImagPrueba);
sForma.addEventListener(MouseEvent.MOUSE_DOWN, fCoger);
sForma.addEventListener(MouseEvent.MOUSE_UP, fSoltar);
function fCoger(event:MouseEvent):void {
   sForma.startDrag();
   trace(sForma);
}
function fSoltar(event:MouseEvent):void {
   sForma.stopDrag();
}


He cambiado algo los nombres de las funciones, espero que no te lies. :wink:

Por oxk4r

56 de clabLevel



 

Orense·España

firefox
Citar            
MensajeEscrito el 25 Nov 2007 04:29 pm

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 26 Nov 2007 09:40 am
Gracias por la ayuda. Ya he conseguido resolver el problema, lo que debía de hacer era acceder al "parent" del Loader (que es un Sprite) y arrastrar este objeto.
Dejo el código por si le es de utilidad a alguien:

Código :

var posX:int = 0;
for (var i:int=1; i<5; i++) {
   var texto:String = new String("imagen");
   texto = texto.concat(i);
   var ciaImagPrueba:CargaImagenArrastable = new CargaImagenArrastable(texto + ".jpg", 50, 50);
   ciaImagPrueba.x=posX;
   posX+=70;
   addChild(ciaImagPrueba);
   ciaImagPrueba.addEventListener(MouseEvent.MOUSE_DOWN, coger);
   ciaImagPrueba.addEventListener(MouseEvent.MOUSE_UP, soltar);
}

function coger(event:MouseEvent):void {
   event.target.parent.startDrag();
}
function soltar(event:MouseEvent):void {
   event.target.parent.stopDrag();
}


En el ejemplo se cargan 4 imagenes distintas (imagen1, imagen2, imagen3, imagen4) y se mueven independientemente.
Un saludo

Por jlsandoval

29 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.