Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: dridly en Octubre 08, 2012, 05:24:28 PM

Título: Click en dos objetos superpuestos
Publicado por: dridly en Octubre 08, 2012, 05:24:28 PM
Buenas,

tengo un objeto que cuando haces click (evento left pressed) se pone otro objeto encima con un mensaje. Una parte de su sprite es transparente, y veo que si le hace click a este objeto también hace el objeto que tiene detrás.

¿Como puedo evitar esto?


David

P.D: adjunto ejemplo, lo pongo como importación de recursos porque tengo versión 8.1 y sería incompatible con versiones anteriores.
Título: Re:Click en dos objetos superpuestos
Publicado por: elviskelley en Octubre 08, 2012, 05:40:21 PM
verificas las depth de cada object al momento en que se presiona el click y compara las dos depth asi solo debe afectar al de mayor depth.
ejemplo.
event cerate
dp=; //guardara si es el de mayor o menor profundidad
clickact=false; //indica si le afecta o no el click
Event de colision con el object que esta en cima.
dp=other.depth; //tomo la depth del otro object y la guardo en la var dp
if dp < depth //osea si la produndidad de la instancia con la que coliciona es mayor es por que esta debajo
{clickact=true;}//se activa el uso del click sobre el.

ahora seguro usas el event de mouse click left... Bueno..
antes de todas las acciones colocas
if clickact=true
{
y aqui el codig normal...
}
Título: Re:Click en dos objetos superpuestos
Publicado por: dridly en Octubre 10, 2012, 10:45:13 AM
Vaya, pensaba que solo con el depth sería suficiente.... :'(


De la manera que me has comentado si que queda solucionado, aunque no me gusta tener que controlarlo en todos los objetos....

Muchas gracias!
Título: Re:Click en dos objetos superpuestos
Publicado por: MONT en Octubre 16, 2012, 05:27:20 AM
Tengo otras alternativas mas sencillas que no hacen exactamente lo que quieres pero te pueden ser igual de utiles. Llamaré A al objeto que hace poner al otro encima y llamaré B al de encima que trae el mensaje.

1.-Si B nunca será mas de 1, Haz que A genere un B solo si la cantidad de B es igual a cero. Ocupa instance_count .
2.-Si B siempre queda sobre A, Haz que A genere un B solo si no estan colisionando.
3.-Crea una variable global.creador y ponle el id de la instancia (A o B) que quieres que reaccione al hacerle click, haz que A o B hagan "lo que deben hacer" con el click solo si su self.id es igual a global.creador; así garantizas que sólo sea 1 quien reaccione. (Cuando B es creado es el momento para darle su id a global.creador).

Mis opciones están algo resumidas, las dejo por si te resultan interesantes y aplicables; si necesitas mas detalle sobre alguna pues lo daré.
Saludos  ;D