Comunidad de diseño web y desarrollo en internet online

removeEvenListener no funciona en as3?

Citar            
MensajeEscrito el 27 Nov 2007 10:03 pm
Hola a todos
Soy un pobre hombre al que el as3 está arruinando todos sus truquis de as2.

Tengo un fla con este código como base. Pone un botón y le da un on rollover-onrollout :
____________________________________________
package ugh{

import flash.display.*
import flash.events.*

public class ugh extends Sprite{
public function ugh(){

function onOver(e:MouseEvent){
var d=e.target
trace("in:"+d)
var g=new Go(d)
}

function onOut(e:MouseEvent){
var d=e.target
trace("out:"+d)
var g=new Go(d)
}

var b=new boton()
addChild(b)

b.addEventListener(MouseEvent.MOUSE_OVER,onOver)
b.addEventListener(MouseEvent.MOUSE_OUT,onOut)

}// fin ugh

}
}
_____________________________________

Por otro lado, tengo esta clase estática, a la que se llama al hacer los rollovers
_______________________________

package{

import flash.display.*
import flash.events.*

public class Go{
public function Go(loque:Sprite){

if(loque.hasEventListener(Event.ENTER_FRAME)){
trace("quita")
loque.removeEventListener(Event.ENTER_FRAME, procede)
}else{
trace("pone")
loque.addEventListener(Event.ENTER_FRAME,procede)
}

var k=0

function procede(e:Event){
trace("procede:"+e.target+" k:"+k)
k++
if(k>10){
loque.removeEventListener(Event.ENTER_FRAME, procede)
}
}// fin procede
}// fin go
}// fin class
}// package

_______________________________________________

Si te pones encima del botón, sale una cuenta "1, 2, 3...";un número onEnterFrame hasta diez.
Pero si sales antes de que la cuenta acabe, aunque detecta el eventListener y lo quita, la cuenta sigue hasta el final, lo que significa que no lo elimina.


Tiene alguien alguna idea de qué es lo que estoy haciendo mal?

gracias por adelantado

Por verytorpe

13 de clabLevel



 

msie
Citar            
MensajeEscrito el 27 Nov 2007 10:11 pm
para remover un ENTER_FRAME

la referencia flash (f1) dice


public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void


osea en tu caso seeria:

Código :

  loque.removeEventListener("enterFrame", procede);


dos consejos: usa las etiquetas code para postear codigo por que asi es dificil la lectura del codigo. y 2 lee la referencia de flash ahi hay materia de sobra para estudiar y te entretengas un rato.


pd: alguien me puede decir como editar un post en el foro por que no veo esa opcion .

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 28 Nov 2007 11:05 am
Perdón por lo del code, ha sido por la ofuscación y la novedad

Ya me he repasado unas cuantas veces tanto la referencia como un par de libros de o'reilly que tengo al respecto, y nasti de plasti. Lo del "enterFrame" ya lo he probado en varias versiones (mayúsculas, minúsculas, reparado por _ , etc) resultado < = 0

Gracias en cualquier caso! Alguna otra idea, por Alá?

Por verytorpe

13 de clabLevel



 

msie
Citar            
MensajeEscrito el 28 Nov 2007 05:38 pm

DiegoAzul escribió:

para remover un ENTER_FRAME

la referencia flash (f1) dice


public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void


osea en tu caso seeria:

Código :

  loque.removeEventListener("enterFrame", procede);


dos consejos: usa las etiquetas code para postear codigo por que asi es dificil la lectura del codigo. y 2 lee la referencia de flash ahi hay materia de sobra para estudiar y te entretengas un rato.


pd: alguien me puede decir como editar un post en el foro por que no veo esa opcion .

Event.ENTER_FRAME es una constante que tiene el valor "enterFrame"

Código :

public static const ENTER_FRAME:String = "enterFrame" 

__________
tienes tu funcion procede dentro de tu funcion Go, ponla fuera, como otro método.

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 29 Nov 2007 10:43 am
Ya me lo han explicado, ya lo he solucionado.

Creo haber entendido, corregidme si me equivoco, que cada vez que hacía una llamada al método se creaba una nueva instancia del método, no se sobreescribía el anterior, de manera que se llamaba a nuevas instancias de addEvent Listener, procede, etc. Y todo sin pulsar F1

Gracias a ambos!!

Por cierto, sabéis de algún sitio donde den explicaciones para idiotas de para qué valen la variables estáticas? No me vale la definición oficial porque la conclusión a la que llego es que no valen para nada

Por verytorpe

13 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Sep 2008 05:27 am
buenas, una preguntica también sobre el removeEventListener:

estoy tratando de hacer que funcione lo siguiente:

Código :

Stage.removeEventListener(KeyboardEvent.KEY_DOWN);


pero sale este error:

1061: Call to a possibly undefined method removeEventListener through a reference with static type Class.

y pues ahí quedé estancado.

¿Alguna idea?

Por afpera

8 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Sep 2008 10:37 am
Debe ser de esta forma:

Código ActionScript :

tuDisplayObject.stage.removeEventListener(KeyboardEvent.KEY_DOWN, laFuncion);


tuDisplayObject es el displayObject al que has añadido un evento a su stage y debes especificar el identificador de la función asociada al evento.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 04 Sep 2008 01:18 pm

elchininet escribió:

Debe ser de esta forma:

Código ActionScript :

tuDisplayObject.stage.removeEventListener(KeyboardEvent.KEY_DOWN, laFuncion);


tuDisplayObject es el displayObject al que has añadido un evento a su stage y debes especificar el identificador de la función asociada al evento.

Pero cuál displayObject si en el addEventListener yo solo puse...

Código :

stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaOprimida);

Por afpera

8 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Sep 2008 02:03 pm

afpera escribió:

elchininet escribió:

Debe ser de esta forma:

Código ActionScript :

tuDisplayObject.stage.removeEventListener(KeyboardEvent.KEY_DOWN, laFuncion);


tuDisplayObject es el displayObject al que has añadido un evento a su stage y debes especificar el identificador de la función asociada al evento.

Pero cuál displayObject si en el addEventListener yo solo puse...

Código :

stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaOprimida);

en este caso, tu displayObject seria stage, por lo que para remover el evento, seria:

Código ActionScript :

stage.removeEventListener(KeyboardEvent.KEY_DOWN, teclaOprimida);

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

safari
Citar            
MensajeEscrito el 04 Sep 2008 06:26 pm
De paso: las variables estáticas sirven para cosas que no van a cambiar de valor (o sea son constantes) y se acceden desde la clase misma, no desde la instancia. Esto es típico de los eventos, por ejemplo esto no funcionaría:

loquesea.addEventListener("enterframe", procede);

Porque se me quedó la F en minúscula. para evitarlo, uso la constante de la clase, que siempre está en mayúsculas y usualmente aparece al poner el nombre de la clase y el punto (no recuerdo en Flash, en Flex lo hace)

loquesea.addEventListener(Event.ENTER_FRAME, procede);

Hay muchas otras utilidades de propiedades y métodos estáticos, pero necesitarías tener una buena base de OOP para que la explicación tenga sentido ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Sep 2008 09:52 am

...que siempre está en mayúsculas y usualmente aparece al poner el nombre de la clase y el punto (no recuerdo en Flash, en Flex lo hace)


En Flash también

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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