Problema con hitTest
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!
Publicado el 8 de Agosto del 2006 en flash actionscript
12 Comentarios
se respira stress en el post :p
pronta solución !!
Comentario publicado el Miércoles, 9 de Agosto del 2006 a las 02:14 am
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á.
Comentario publicado el Miércoles, 9 de Agosto del 2006 a las 12:32 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).
Comentario publicado el Miércoles, 9 de Agosto del 2006 a las 12:35 pm
Patricio
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
Comentario publicado el Miércoles, 9 de Agosto del 2006 a las 01:58 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.
Comentario publicado el Miércoles, 9 de Agosto del 2006 a las 07:32 pm
Paul Lopez
Yo se como hacerle Stan pero ahorita voy de salida, y regreso hasta el sabadaba, el sabado te digo como hacerle.
Comentario publicado el Jueves, 10 de Agosto del 2006 a las 11:44 am
ja! esto lo necesito para el viernes :P En fin, mi busqueda no ha parado!
Comentario publicado el Jueves, 10 de Agosto del 2006 a las 12:04 pm
Patricio
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;
}
}
Comentario publicado el Jueves, 10 de Agosto del 2006 a las 12:10 pm
upps! borre un comentario por accidente :P
Comentario publicado el Jueves, 10 de Agosto del 2006 a las 08:27 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.
Comentario publicado el Viernes, 11 de Agosto del 2006 a las 02:11 pm
Gracias por los comentarios, les comunico que ya encontre la solucion y que estoy proximo a subirla en el siguiente post.
Comentario publicado el Lunes, 14 de Agosto del 2006 a las 03:17 pm
JORGE
Soy inexperto en FLASH pero quiero saber si el hitTest solo funciona con movimiento de raton
Comentario publicado el Miércoles, 3 de Enero del 2007 a las 05:19 pm