Comunidad de diseño web y desarrollo en internet online

Forzar a as3 a comprobar un evento

Citar            
MensajeEscrito el 22 Sep 2011 08:29 am
Hola,

resulta que en mi programa tengo una serie de objetos en pantalla que a veces necesitan recibir evento rollOver y otras veces no.

El problema que tengo es que cuando en uno añado un listener de rollOver necesito que éste haga el rollOver.

He intentado usar los mouseX y mouseY (tanto de target como del displayObject) para lanzar el evento manualmente si el puntero está encima del object y no me sirven, los MovieClips han sido escalados bastantes veces, rotados, movidos... para entendernos, la posición de la esquina superior izquierda si el puntero está encima respecto al displayObject no es 0,0... ni en pintura; ni es parecida en cada uno de los diferentes objetos.

Sin embargo el rollOver de AS3 funciona bien, y por eso quería preguntar si hay alguna forma de decirle "mira cada objeto y si crees que el puntero está encima, haz el rollOver".

¡Gracias!

Por jano_alex_es

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Sep 2011 01:26 pm
Acá hay dos cosas

1. ¿Estás detectando que el puntero está encima o ni siquiera?
2. El onRollOver tiene que operar sobre un MC y moverlo al fotograma 2 por ejemplo (o al que tenga el estado over), entonces solo tienes que hacer un gotoAndStop

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Sep 2011 04:43 pm

solisarg escribió:

1. ¿Estás detectando que el puntero está encima o ni siquiera?


Ahora estoy detectándolo con hitTestPoint pero el valor recibido no es exacto.

Siempre tengo unos cuantos objetos (todos movieclips) pegados, unos sobre otros parcialmente. Al estar rotados y escalados si pongo el puntero a un pixel o dos del borde de uno de ellos los dos me dan el hitTest como verdadero, cuando yo quiero que me devuelva, con una exactitud perfecta, cual/cuales son los que están en la punta de la flecha.

Si pongo el puntero sobre una zona compartida por dos objetos me devuelve los dos, que es lo esperado. Pero si la punta de la flecha está en un pixel o dos fuera del borde de uno de los objetos generalmente me devuelve true cuando no debería. Y necesito de esa exactitud.

Lo que no entiendo es por qué hitTest no me funciona bien y el evento click tiene una exactitud perfecta. ¿Hay alguna forma de saber el código del evento click interno de as3?


solisarg escribió:

2. El onRollOver tiene que operar sobre un MC y moverlo al fotograma 2 por ejemplo (o al que tenga el estado over), entonces solo tienes que hacer un gotoAndStop


No me importa qué ocurra después, ese código funciona bien. Pero no detecta el objeto correctamente.

Por jano_alex_es

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Sep 2011 04:58 pm
Por muy bien que intente explicarme... creo que no voy a conseguirlo bien sin una imagen medio indicativa.



Con el puntero en el punto:
a: hittestPoint devuelve true para el rojo y false para el verde.
c: true para ambos
d: true para verde

(hasta aquí todo lógico)

b: la punta de la flecha está realmente en el rojo, por un par de píxels, pero devuelve true en ambos. Sin embargo, si tengo el puntero en el mismo sitio y hago un click el evento va solamente al rojo, no al verde. Ocurre lo mismo con el rollOver y rollOut. El código interno de flash funciona mejor que el que proporcionan a los desarrolladores.

Por eso quiero preguntar si hay forma de decirle "mira a ver si puedes hacer un rollOver", para comprobar con exactitud si el puntero está donde toca.

Por jano_alex_es

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Sep 2011 08:03 am
Bueno, al final lo solucioné poniendo a "true" el parámetro del hitTestPoint para que lo haga por píxel y ajustando los resultados un un poco de trigonometría básica.

Por jano_alex_es

21 de clabLevel



 

chrome

 

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