Stanmx

Buscando la accesibilidad

Problema con hitTest

Publicado en flash actionscript el 08/08/06 a las 05:52 pm
Macromedia Flash 8

Aqui estoy una vez mas posteando, esta vez para solicitar la ayuda de los lectores en un problema que se me ha presentado con una animacion hecha en Macromedia Flash.

Es un poquita larga la historia pero vale la pena leerla. Ocurre lo siguiente:

Intento hacer para mi trabajo, una animacion que llama una imagen .jpg externa. Hasta aqui ningun problema.

Lo segundo que intento hacer (y que aun no he logrado exitosamente) es que la mitad del area de la animacion este un movieclip (el cual contiene un scroll con texto). Este movie clip este invisible y al posar el cursor sobre el, el movieclip aparezca y pueda mover el scroll con toda tranquilidad. Esta parte tambien la he logrado, con un metodo llamado hitTest.

El metodo hitTest() es usado para determinar si un movieclip o un punto especifico hace interseccion con un movieclip.

El codigo que utilice para esto es el siguiente:

onClipEvent(enterFrame){
		if(this.hitTest(_root._xmouse ,_root._ymouse,true)) {
  		this._alpha = 100;
		trace("aparece");
	}
else {
  	this._alpha = 0;
	trace("desaparece");
	}
}

Hasta aqui todo bien, el problema esta en que este codigo hace que todo el tiempo este trabajando el hitTest. Cada que lo testeo, el "desaparecer"(cuando no selecciono el movieclip) y "aparecer"(cuando selecciono el movieclip) estan apareciendo constantemente en mi pantalla de Output.

Lo que necesito es otra manera de hacer esto.

Encontre otro metodo que supuestamente disminuye el tiempo que esta el hitTest funcionando activamente:

mioreja = new Object();
mioreja.onMouseMove = function () {
   if(this.hitTest(_root._xmouse , _root._ymouse,true)) {
   this._alpha = 100;
} else {
   this._alpha = 0;
};
  };
Mouse.addListener(mioreja);

El problema es que no logre hacerlo funcionar.

Si alguien conoce algun programador de Flash que pueda orientarme con mucho gusto se lo agradecere, gracias por el tiempo!

12 comentarios

Dr.Bizarre

dijo el 09/08/06 a las 02:14 am

se respira stress en el post :p

pronta solución !!

Octavio Alvarez

dijo el 09/08/06 a las 12:32 pm

Stan, yo no sé nada de Flash, pero si fuera C++/Java, en tu código no parece que "mioreja" sea el clip. Si el clip tiene un evento OnMouseMove, yo intentaría eso: probar OnMouseMove sobre el clip, no sobre un objeto que no sé ni dónde está.

Octavio Alvarez

dijo el 09/08/06 a las 12:35 pm

Insisito en que no sé Flash, pero si el clip tiene OnMouseEnter y OnMouseExit, no necesitarías hacer ni HitTest. Otra opción es hacer un cuadro transparente al frente del clip y trabajar los eventos sobre él (OnMouseEnter y OnMouseExit, o OnMouseMove/HitTest).

Patricio

dijo el 09/08/06 a las 01:58 pm

Probá hacer un objeto arriba de ese con un cuadrado en cualquier color con alpha 0 para que sea invisible, y a ese objeto ponele on(rollOver) y on(rollOut,dragOut) para las acciones asi las hace una vez sola y no estas checkeando el enterFrame todo el tiempo. Postea de nuevo cuando encuentres la solución! Suerte

stan

dijo el 09/08/06 a las 07:32 pm

Gracias por las recomendaciones Octavio y Patricio. Por alguna extraña razon, el rollover de ese clip invisible hace conflicto con el scrollbar lo mas cercano que he encontrado a mi problema ha sido ese codigo que he posteado. Sin embargo como menciono, al hacer un trace para ver como trabaja, me doy cuenta que todo el tiempo esta trabajando, este el cursor dentro del movieclip o fuera de el.

Ese codigo de mi oreja, como lei, iba dentro del moviclip al que se le queria aplicar el efecto. Y el otro codigo es el que hasta el momento me esta funcionando y va fuera del movieclip.

Paul Lopez

dijo el 10/08/06 a las 11:44 am

Yo se como hacerle Stan pero ahorita voy de salida, y regreso hasta el sabadaba, el sabado te digo como hacerle.

stan

dijo el 10/08/06 a las 12:04 pm

ja! esto lo necesito para el viernes :P En fin, mi busqueda no ha parado!

Patricio

dijo el 10/08/06 a las 12:10 pm

si lo pones como onMouseMove te lo va a seguir haciendo cada vez que moves el mouse, si queres que lo haga una sola vez consulta con un if si una variable esta en true y si no es asi hace la accion y ponela en true para que ya no se vuelva a repetir. despues cuando ya no este tocando el objeto se vuelve a poner en false ej:
onClipEvent(enterFrame){
if(this.hitTest(_root._xmouse ,_root._ymouse,true)) {
if (!(yasehizo)) {
this._alpha = 100;
trace("aparece");
yasehizo = true;
}
} else {
yasehizo = false;
}
}

stan

dijo el 10/08/06 a las 08:27 pm

upps! borre un comentario por accidente :P

Octavio Alvarez

dijo el 11/08/06 a las 02:11 pm

El mío, donde digo que el método que propone Patricio va a callar la salida de "aparece" y "desaparece", pero el CPU va a estar consumiéndose al 100% de todos modos.

Ese error lo he visto en algunos juegos mal programados, que, independientemente de que uno baje el tamaño y la calidad, siguen consumiendose el microprocesador.

stan

dijo el 14/08/06 a las 03:17 pm

Gracias por los comentarios, les comunico que ya encontre la solucion y que estoy proximo a subirla en el siguiente post.

JORGE

dijo el 03/01/07 a las 05:19 pm

Soy inexperto en FLASH pero quiero saber si el hitTest solo funciona con movimiento de raton

Aporta tu comentario

Tu Email no sera publicado.

Opcional.