Comunidad de diseño web y desarrollo en internet online

Llamada a un método addEventListener posiblemente no definid

Citar            
MensajeEscrito el 10 Ago 2008 06:22 pm
Buenas... estoy liado con el addEventListener.

Tengo esta clase.

Código ActionScript :

package objeto{
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.events.*;
    import flash.ui.Mouse;

   public class Objeto extends MovieClip {
      function Objeto()
      {
         addEventListener(MouseEvent.MOUSE_MOVE, onMove);
      }
      
      
      private function onMove(e:MouseEvent):void
         trace("*");
      }

   }


Y cuando lo lanzo me salta este error :

Objeto.as:14: 1180: Llamada a un método addEventListener posiblemente no definido.

Que es lo que estoy haciendo mal ??

Muchas gracias de antemano... he estado mirando ejemplos y sigo sin entender porque a mi no me va...

Gracias!

Por nothingseg

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ago 2008 06:28 pm
A quién le estás asignando el evento, debe ser algo como esto:

Código ActionScript :

unDisplayObject.addEventListener(MouseEvent.MOUSE_MOVE, onMove); 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 10 Ago 2008 06:31 pm
Buenas, unDisplayObject es un objeto de que tipo ?

De todas formas copiando literalmente la linea que me has pasado da el mismo error...

Por nothingseg

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ago 2008 09:12 pm
Claro que te dará error porque "unDisplayObject" no existe, no lo tienes declarado, es un nombre genérico que te puse para ponerte un ejemplo de que le puedes asignar un evento por ejemplo a un displayObject, pero no puedes asignarle un evento de mouse a la "nada" como lo tienes en este momento.

Pero me parece que no te debería lanzar herror mas bien no funcionarte, rectifica los corchetes que te faltan y añade la clase movieClip:

Código ActionScript :

package objeto{
   import flash.display.DisplayObject;
   import flash.display.MovieClip; //Añade esta clase
   import flash.display.Sprite;
   import flash.display.Loader;
   import flash.events.*;
   import flash.ui.Mouse;

   public class Objeto extends MovieClip {
      function Objeto() {
         addEventListener(MouseEvent.MOUSE_MOVE, onMove);
      }


      private function onMove(e:MouseEvent):void{ //Este corchete
         
         trace("*");
         
      }
      
   }

} // Y este corchete también

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 11 Ago 2008 04:24 pm
Buenas, gracias por la respuesta...

Parece que dominas del tema... a ver si me puedes responder a un par de preguntas...

1) Para utilizar un addeventlistener, el objeto ha de estar en pantalla ? ( addchild ) o bien se puede poner sin necesidad de incluirlo... es decir primero inicializarlo... y mas tarde añadirlo.

2) Un addeventlistener no se puede utilizar en una clase estatica verdad ? si se puede como se hace ? y sino se puede... cual es la causa?

3) El hecho esta en que tengo un objeto que necesito que este visible para toda la aplicacion y lo que se me ocurrio es hacer una clase estatica con un campo que apunte a ese objeto pero si dicho objeto tiene un addeventlistener creo que no le gusta al as3... como deberia hacerlo ? cual es la forma correcta ?

Muchas gracias por tu ayuda... se agradece.

Por nothingseg

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Ago 2008 10:28 pm
Todas tus respuestas se responden creando una clase con patrón Singlenton, de esta forma cada vez que quisieras acceder a una variable de esta clase puedes hacerlo, lo mismo desde el timeline que desde otra clase, en el siguiente ejemplo he creado un Sprite y le he asignado un addEventListener, fíjate que no se necesita que este haya sido añadido a una DisplayList:

Código ActionScript :

package {
   
   import flash.display.Sprite;
   import flash.events.*;
   
   public class globalClass{

      public var unObjeto:Sprite;

      private static var myObjeto:globalClass;

      public function globalClass() {

         unObjeto = new Sprite();
         
         with(unObjeto.graphics){
   
            beginFill(0xFF0000, 1);
            drawRect(0, 0, 100, 200);
            endFill();
            
         }
         
         unObjeto.addEventListener(MouseEvent.MOUSE_MOVE, doTheTrace);

      }
      
      public static function getInstance():globalClass {

         if (myObjeto == null) {

            myObjeto = new globalClass();

         }
         
         return myObjeto;

      }
      
      private function doTheTrace(evt:MouseEvent):void{
         
         trace("mouse move");
         
      }
   }
}


Después si quisiera donde quiera que esté añadir esta variable a la escena solamente debo poner:

Código ActionScript :

addChild(globalClass.getInstance().unObjeto);


Esta clase no necesita ser instanciada ya que ella misma se instancia al invocar a getInstance(), el sprite será añadido a la escena con todos los eventos que se definieron en la clase.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 12 Ago 2008 04:39 pm
Ok muy interesante tu respuesta. Un codigo breve y conciso. Da gusto programar asi ;)

Gracias por tu tiempo y apoyo y ya te diré.

Thks!

Por nothingseg

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Dic 2009 01:10 pm
Buenas no quise abrir un nuevo tema, y más o menos viene al caso. Estoy haciendo un portafolios en flash, soy diseñador gráfico, pero de desarrollo en flash, estoy demasiado verde. Me estoy poniendo a ello, buscando en foros y demas, pero no soy capaz de solucionar este problema. Tengo unos botones, con unos addListenerEvent, q no me funcionan. Los botones estan dentro de un MC, y les marco la ruta de acceso bien y no me hacen el gotoandStop q les pido. Saco los botones del MC, y lo pongo en el escenario y si me hacen el gotoandStop (cambiando la ruta de dnd esta el boton obviamente ). No tengo problemas con otros dos addListenerEvent, q hago en el fotograma1 del escenario y me hacen perfectas las funciones, y estan en el mismo MC q los botones q no me hacen ni p... caso. Bueno os dejo el codigo, y comentamos a ver q puede ser.


Código ActionScript :

this._cab.menu_cab.addEventListener ( MouseEvent.ROLL_OVER, goto_on);
this._cab.inactivo.addEventListener ( MouseEvent.ROLL_OVER, goto_off);
this._cab.gallery_button1.addEventListener( MouseEvent.CLICK, goto_gallery1 );
this._cab.gallery_button2.addEventListener( MouseEvent.CLICK, goto_gallery2 );
this._cab.gallery_button3.addEventListener( MouseEvent.CLICK, goto_gallery3 );
this._cab.gallery_button4.addEventListener( MouseEvent.CLICK, goto_gallery4 );


function goto_on(e:MouseEvent):void{
   this._cab.gotoAndPlay ( "on")
}

function goto_off(e:MouseEvent):void{
   this._cab.gotoAndPlay ( "off")
}


function goto_gallery1(e:MouseEvent):void {
   gotoAndStop("g1");
   
}


function goto_gallery2(e:MouseEvent):void {
   gotoAndStop("g2");
   
}

function goto_gallery3(e:MouseEvent):void {
   gotoAndStop("g3");
   
}

function goto_gallery4(e:MouseEvent):void {
   gotoAndStop("g4");
   
}

var fondo:MovieClip = new MovieClip();
addChildAt(fondo,0);

var load_fondo:Loader = new Loader();
load_fondo.load(new URLRequest("fond.jpg"));
fondo.addChild(load_fondo);
fondo.x=150;
fondo.y= 138;
fondo.alpha=0.3;

var load_cab:Loader = new Loader();
load_cab.load(new URLRequest("cab.jpg"));
this._cab.rect_cab.addChild(load_cab);



stop();



Un saludo y un millon de gracias, un poco de paciencia q estoy empezando ;)

Por estudiobetta

2 de clabLevel



 

safari
Citar            
MensajeEscrito el 01 Dic 2009 02:38 pm
Cambia la primera funcion por esta a ver si te funciona ...

Código ActionScript :

function goto_on(e:MouseEvent):void{
      e.target.parent.gotoAndPlay ( "on")
}
salu2

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 01 Dic 2009 03:54 pm
Buenas he probado el codigo y no soy capaz de hacerlo funcionar. Me falto especificar q los botones q no me funcionan son los gallery_button1,2,3,4. Los otros dos son los q si q me funcionan bien. Estan todos los botones dentro del MC _cab, y la diferencia q encuentro es q los botones q si funcionan manejan la linea de tiempo del MC q los contiene, y el otro maneja la linea principal, les puse this.gotoAndStop ( "g1"); el this es pq la linea de código está en la linea principal. No tengo idea de como solucionarlo ;) Sigo probando cosas, he probado a comentar las lineas q importan el fondo, por si me tapaba las galerias q quiero cargar, y nada.

Muchas gracias por la respuesta.
Migue

Por estudiobetta

2 de clabLevel



 

safari
Citar            
MensajeEscrito el 01 Dic 2009 04:14 pm
Le estoy pillando miedo a los fantasmas del flash ( lo de fantasmas se q es pq no tengo ni puta idea ;) ) Bueno no le puse nada más al código, probé la peli y me funciono :S Le volví a dar a probar y dejo de funcionar. Supongo q pueda ser un dato a tener en cuenta, control de las pelis?¿ o.....?¿ Bueno lo dejo ahí por si sirve de algo el dato

Por estudiobetta

2 de clabLevel



 

safari
Citar            
MensajeEscrito el 01 Dic 2009 04:34 pm
Bueno todo solucionado, lo de los fantasmas me hizo ver dnd podía estar el error, y era q en una peli tenía puesto un stop q no sabía q estaba y era esto. Muchas gracias. Algún manual para comprar q me ayude a realizar trabajos con flash, algo q mezcle código, con ejemplos útiles?¿

Gracias Migue

Por estudiobetta

2 de clabLevel



 

safari

 

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