Comunidad de diseño web y desarrollo en internet online

Seleccionar objeto credo con otra clase

Citar            
MensajeEscrito el 17 Dic 2010 05:25 pm
Hola chicos.. la verdad es que tengo un problema que no se resolver ni pude encontrar la solucion.. estoy tratando de hacer un drag a un objeto creado dinamicamente con otra clase.. pero no se como hacer.. les paso el codigo.. saludos

el error:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.

La funcion que lo llama en la clase principal

Código ActionScript :

public function mueveCurva(evt:MouseEvent):void {
         trace(evt.target.parent.name);
         /*var Obj:Object = evt.target.parent.child(point1);
         Obj.startDrag();*/
         (parent as Object).point1.startDrag();
         //evt.target.startDrag();
         drawLine(new Event(Event.ENTER_FRAME));
         addEventListener(MouseEvent.MOUSE_UP, finmueveCurva);
      }


y esta funcion es la que crea los 3 objetos de los cuales quiero seleccionar el que yo quiera

Código ActionScript :

public function PencilPoint(_x:Number=0, _y:Number=0) {
         super();
         anchorPoint = new Point(_x,_y,4,0xFFFF00);
         anchorPoint.name = "anchor";
         addChild(anchorPoint);
         anchorPoint.addEventListener(MouseEvent.MOUSE_DOWN,startMove);
         anchorPoint.addEventListener(MouseEvent.MOUSE_UP,stopMove);


         controlPoint1 = new Point(_x,_y);
         controlPoint1.name = "point1";
         addChild(controlPoint1);
         controlPoint1.addEventListener(MouseEvent.MOUSE_DOWN,startMove);
         controlPoint1.addEventListener(MouseEvent.MOUSE_UP,stopMove);

         controlPoint2 = new Point(_x,_y);
         controlPoint2.name = "point2";
         addChild(controlPoint2);
         controlPoint2.addEventListener(MouseEvent.MOUSE_DOWN,startMove);
         controlPoint2.addEventListener(MouseEvent.MOUSE_UP,stopMove);

      }



Gracias de antemanos espero que me puedan ayudar

Por sergiogmuro

19 de clabLevel



 

msie7
Citar            
MensajeEscrito el 17 Dic 2010 06:07 pm
Por un momento me asuste pensando que eran Point nativos de adobe.

En tu funcion intentas forzar a mover point1 pero me imagino quieres mover el punto que en ese momento despache el evento.

Como el listener lo estas poniendo en cada objeto no es necesario irse a su padre ni anda de eso, el target del evento es el mismo objeto basta con e.target.startDrag(), para evitar errores yo siempre uso e.currentTarget, ve la documentacion y veras cual te conviene en cada situacion (en este caso conviene current).

Sospecho que lo anterior te va tirar un error asi que tienes que hacer un poco de casting, no se si tus objetos son MovieClip, Sprite o alguna otra cosa, pero imaginando que son MovieClip.

Código ActionScript :

public function mueveCurva(evt:MouseEvent):void { 
      MovieClip(evt.currentTarget) .startDrag(); 
         drawLine(new Event(Event.ENTER_FRAME)); 
         addEventListener(MouseEvent.MOUSE_UP, finmueveCurva); 
      }


Nota: Es facil confundirse entre name y nombe de instancia, si pones un objeto en escena con nombre de instancia clip1 su propiedad name tmb sera clip1 de alli la confusion, pero si le cambias el nombre.

Código ActionScript :

clip1.name = "nombre";


No podras referirte a el como "nombre", si en algun lado haces trace(nombre); lanzara un error sigue siendo clip1 su nombre de instancia, asi que querer acceder a tu variable controlPoint1 por su nombre point1 no lo puedes hacer, no de la manera que intentabas parent.point1 (No existe) parent.getChildByName("point1"); ya te devuelve la referencia.

AS3 parece revoltoso al principio pero poco a poco te acostumbras a lo basico.

Saludos.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox

 

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