Hola!
Estoy haciendo un juego para colorear y tengo un problema con los objetos de las capas de dibujo
(http://forexhispano.org/imagenes/gmsColorea.jpg)
La capa de fondo, que es la que se pinta, está por debajo (depth = 0) y el menu con los colores está por encima (depth = -50), pero cuando pincho en el color que está encima de la capa, automáticamente se me pinta esta capa de ese color
Es decir, al pinchar en el color amarillo.. se me pinta el fondo de debajo de amarillo, cosa que no pasa si lo hago con el azul, ya que aun no tiene capa por debajo.
El evento en la capa que se va a pintar lo tengo con un left release.
He probado a poner las capas del menu como solidas y persistentes pero no sirve de nada...
¿Como puedo solucionarlo?
Un saludo!
La cosa es que, cada uno tiene maneras distintas de hacer las cosas. por ejemplo, yo escribo los codigos en papel, y luego al pasarlo al GM los simplifico lo mas posible, ya que por lo general dejo los editables para que vean como lo he creado. Lo que quiere hacerte entender es que sin un ejemplo editable. o que muestres los codigos que usas, no podremos saber cual es tu error.
Pues no puse código porque realmente hay poco todavia pero os lo pongo:
Al pinchar en un objeto de la paleta de colores:
CitarInformation about object: objColorRojo
Sprite: sprPaletaColorRojo
Solid: true
Visible: true
Depth: -51
Persistent: true
Parent:
Children:
Mask:
No Physics Object
Mouse Event for Left Released:
execute code:
///Cambiamos el color para pintar
global.colorPincelR = 251;
global.colorPincelG = 0;
global.colorPincelB = 0;
Y al pinchar sobre la pieza que quiero pintar:
CitarInformation about object: objAnimal1Pieza1
Sprite: sprAnimal1Pieza1
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Mouse Event for Left Released:
execute code:
///Cambiamos el color del objeto
global.parteImagenElegida = object_index;
objPintarColor.alarm[0] = 1;
Y el objeto encargado de pintar:
CitarInformation about object: objPintarColor
Sprite:
Solid: false
Visible: true
Depth: -50
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Alarm Event for alarm 0:
execute code:
///Pintamos el color indicado en la imagen elegida
var elegida;
var R;
var G;
var B;
elegida = global.parteImagenElegida;
R = global.colorPincelR;
G = global.colorPincelG;
B = global.colorPincelB;
//Pintamos con el color elegido
elegida.image_blend = make_color_rgb(R, G, B);
Lo que no entiendo es como atravieso con el click el objeto que está encima y lanza la función de la pieza a pintar
Para que lo veais gráficamente:
ANTES
(http://forexhispano.org/imagenes/colorClickAntes.jpg)
DESPUES
(http://forexhispano.org/imagenes/colorClick.jpg)
Cita de: DaiGoN en Marzo 28, 2015, 08:03:03 PM
Lo que no entiendo es como atravieso con el click el objeto que está encima y lanza la función de la pieza a pintar
El comportamiento (que no es un error ni problema) se puede explicar así:
GMS es políticamente correcto, imparcial y democrático y por lo tanto, no DISCRIMINA los clicks. Si en la zona de la pantalla donde se hace click hay uno, dos tres, (los que sean) objetos, y si esos objetos tienen eventos de ratón, pues el evento se lanza para todos ellos por igual, sin importar la profundidad de dichos objetos.
¿Qué quiere decir esto? Que en juegos donde se traslapan sprites de distintos objetos (en este caso, el sprite de la paleta se traslapa con el lienzo donde se pinta) al hacer click, debe haber un código que haga lo que GM no hace: discriminar clicks o darle prioridad a los clicks, o no admitir clicks si algo pasó o no paso en otro objeto. No vi que hubiera este tipo de código en los códigos de arriba.
Sugerencia de solución: Que el lienzo sólo admita el evento LEFT RELEASED si el puntero NO ESTÁ sobre el sprite de la paleta de colores. O dicho de otra manera, no pintar si el puntero está sobre alguna zona de la paleta de colores
Entiendo
Pensaba que las capas se solapaban siendo solidas o algo así...
En ese caso, hay alguna forma de especificar por GML que está encima del objeto paleta? o tengo que jugar con los rangos de coordenadas de X e Y?
Así funciona, pero no me termina de gustar... ???
if(!((mouse_x > 1104 and mouse_x <1280)
and (mouse_y > 47 and mouse_y < 635))){
var elegida;
var R;
var G;
var B;
elegida = global.parteImagenElegida;
R = global.colorPincelR;
G = global.colorPincelG;
B = global.colorPincelB;
//Pintamos con el color elegido
elegida.image_blend = make_color_rgb(R, G, B);
}