Bueno, tengo un sistema de id's para cada objeto, es decir, la id de cada objeto es unica.
Bueno el sistema es que si le das click la variable (global.seleccionado) se iguala con la id de dicho objeto, y permite usar ese objeto (moverse y demas cosas). Bueno mi problema es cuando hay un objeto delante de otro objeto (ej, un personaje delante de un iglesia) que al pinchar en el personaje, pues como la iglesia esta atras pues tambien recibe el click y se selecciona.
Cabe destacar que solo puede estar seleccionado un objeto, y es por ello que una vez que pongo el personaje delante de la iglesia y lo deselecciono (global.seleccion = 0 (id inexistente)) pues se queda estancado alli hasta el infinito.
¿Alguna forma de solucionarlo?
Creo que sigues confundiendo conceptos.
Los objetos de GM no tienen ID's, tienen un índice de objeto. Lo que posee ID en GM son LAS INSTANCIAS (que no es lo mismo que un objeto)
Sea lo que sea que guardes en global.seleccionado, quiero pensar que es un número. El problema radica en que antes de guardar ese número, parece que no estás preguntando si en global.seleccionado ya hay un número de otra instancia. Es decir, sólo se debe permitir guardar un identificador en global.seleccionado CUANDO NO HAY OTRO YA GUARDADO. De esta forma se impide seleccionar más de un objeto a la vez y se obliga al usuario a deseleccionar un objeto antes de seleccionar otro.
No indicas en que evento usas global.seleccion = 0. No es un código que se pueda poner en STEP a la ligera, porque podría interferir con el código de selección. Es mejor usarlo en un evento PRESSED o en un RELEASED, eso depende de cómo quieras que funcione la deselección de cosas en tu juego.
Te explico. Cada instancia (¿en que se diferencia, ¿que es lo que esta en el juego?.) tiene una variable usuarioid o edificioid , esta se crea gracias a una variable global.uid +=1 si la anterior es 0, esto hace que cada instancia tenga su propia id.
Para seleccionarlos tengo el evento de raton izquierdo, que al darle a la instancia pues calcula si la variable de seleccion es distinta a la variable de la id de dicha instancia, en ser distinta pues se igualan y quedan "seleccionados", es decir que ya puedes usar las funciones de esa instancia.
Bueno, probare lo de que no haya seleccionado, aunque sera un poco rollo estar seleccionando y deseleccionando para mover las unidades, etc.
Cita de: Xizotono en Agosto 29, 2014, 11:33:04 AM
Para seleccionarlos tengo el evento de raton izquierdo, que al darle a la instancia pues calcula si la variable de seleccion es distinta a la variable de la id de dicha instancia, en ser distinta pues se igualan y quedan "seleccionados", es decir que ya puedes usar las funciones de esa instancia.
Pues ahí está el detalle, revisar si son distintas hace que se pueda seleccionar la iglesia que está detrás del personaje (tomando el ejemplo del primer mensaje) porque el evento se lanza para ambas instancias. De la manera en que lo tienes programado no se garantiza que se seleccione sólo un objeto por click: el personaje revisa la variable, ve que tiene una id distinta, entonces guarda la suya, luego la iglesia revisa la variable, ve que su id es distinto al guardado, entonces guarda su id.
Creo que se puede por ejemplo, usar una variable
vacío, que se inicia en 1 y que en un left released siempre se haga 1. Entonces, en el evento de ratón donde seleccionas la instancia, se pregunta si vacio es 1, si es así, se guarda el id en la variable correspondiente, y después de guardar esa id, vacio = 0. Así que si en ese mismo click el evento se lanza para otra instancia vacio ya va a ser 0 y no se va a poder guardar otra instancia hasta que se suelte el botón, se lance el evento released y vacio se haga de nuevo 1.
Cita de: penumbra en Agosto 29, 2014, 05:50:35 PM
Cita de: Xizotono en Agosto 29, 2014, 11:33:04 AM
Para seleccionarlos tengo el evento de raton izquierdo, que al darle a la instancia pues calcula si la variable de seleccion es distinta a la variable de la id de dicha instancia, en ser distinta pues se igualan y quedan "seleccionados", es decir que ya puedes usar las funciones de esa instancia.
Pues ahí está el detalle, revisar si son distintas hace que se pueda seleccionar la iglesia que está detrás del personaje (tomando el ejemplo del primer mensaje) porque el evento se lanza para ambas instancias. De la manera en que lo tienes programado no se garantiza que se seleccione sólo un objeto por click: el personaje revisa la variable, ve que tiene una id distinta, entonces guarda la suya, luego la iglesia revisa la variable, ve que su id es distinto al guardado, entonces guarda su id.
Creo que se puede por ejemplo, usar una variable vacío, que se inicia en 1 y que en un left released siempre se haga 1. Entonces, en el evento de ratón donde seleccionas la instancia, se pregunta si vacio es 1, si es así, se guarda el id en la variable correspondiente, y después de guardar esa id, vacio = 0. Así que si en ese mismo click el evento se lanza para otra instancia vacio ya va a ser 0 y no se va a poder guardar otra instancia hasta que se suelte el botón, se lance el evento released y vacio se haga de nuevo 1.
Ya lo habia pensado, pero lo intente con alarmas y no me dio fruto (a lo mejor me equivoque en el codigo), bueno probare como usted dice. Un saludo.