Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/12/2008, 15:03
asturkon35
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ayuda con Sprite en AS3

Cita:
Iniciado por jahepi Ver Mensaje
Hola asturkon35 !

Esto pasa por la propagación del evento, si le has asignado a tu instancia 'c' que escuche por el evento mousedown, también será aplicado a las intancias internas, en este caso sería la instancia 'letra'.

Cuando presionas el mouse sobre la instancia 'letra', el evento se propaga hasta la función arrastrar, el evento propagado tiene una atributo target que hace referencia al objeto que presionaste.

Si presionas la instancia letra esto es lo que pasa:

Código actionscript:
Ver original
  1. function arrastrar(evt:MouseEvent):void {
  2.     trace(evt.target); //Event.target hace referencia a la instancia letra.
  3.     evt.target.startDrag(); //Como la instancia letra no cuenta con el método startDrag(), el programa lanza una excepción.
  4. }

Si le das click en cambio al sprite, todo funcionara perfecto porque este si cuenta con el método startDrag.

Una forma de solucionarlo es decirle a tu instancia 'letra' que no propage los eventos generados por el mouse, esto lo haces con el atributo mouseEnabled.

Deberás cambiarlo a false:
Código actionscript:
Ver original
  1. var c:Sprite = new Sprite();
  2. var letra:TextField=new TextField();
  3. letra.mouseEnabled = false;  //Aquí el truco
  4. c.graphics.beginFill(0x000000);
  5. c.graphics.drawCircle(100, 100, 50);
  6. c.addEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
  7. c.addEventListener(MouseEvent.MOUSE_UP,soltar);
  8. letra.text="A";
  9. letra.selectable=false;
  10. c.addChild(letra);
  11. addChild(c);
  12.  
  13. function arrastrar(evt:MouseEvent):void {
  14.     evt.target.startDrag();
  15. }
  16.  
  17. function soltar(evt:MouseEvent):void {
  18.     evt.target.stopDrag();
  19. }

Otra forma, sería que cambiaras event.target, por la instancia 'c', en tus 2 funciones arrastrar y soltar:

Código actionscript:
Ver original
  1. function arrastrar(evt:MouseEvent):void {
  2.     c.startDrag();
  3. }
  4.  
  5. function soltar(evt:MouseEvent):void {
  6.     c.stopDrag();
  7. }


Un saludote !
Ahora si
Mil gracias no solo por la solución sino también por la explicación, muy clara e instructiva

Un saludote a ti