Buenas, os explico el problema en cuestión:
Los monstruos que se matan en mi juego tienen la posibilidad de caerse, en ese caso, se destruye el objeto_monstruo, se crea un sprite de monstruo_suelo, y al segundo, se destruye el sprite monstruo_suelo y se vuelve a crear un objeto_monstruo del mismo tipo(simulando que se levanta).
Para los que solo aguantan un toque no tengo problema, pero tengo un monstruo que aguanta 3 toques y claro, si le pegas dos tiros y da la casualidad de que se cae, se levanta como un monstruo nuevo con toda la salud.
Sé que la solución debe de andar por hacer una variable de "salud", pero soy muy nuevo y no sé como debo expresarlo, si alguien me ayuda le estaré muy agradecido :)
no entiendo bien tu pregunta, tu problem es con con el monstruo de 3 toques, se levanta como un monstruo de 3 en vez de 2?
Lo que busco es, que el monstruo que aguanta 3 toques, si se cae después de haber sido atacado (ya sea una o dos veces), se levante con la misma salud que le faltaba cuando se cayó.
oh en ese caso, en vez de destruir el objeto monstruo debes cambiar su sprite_index
Pero entonces también tendría que hacer que durante ese tiempo se detuviese y después reanudase... y la verdad es que, aunque me vendría muy bien para optimizarlo, no tengo ni idea de cómo hacer tanta cosa por código :(
podrias hacer algo como
if sprite vivo
{
codigo de movimiento
}
no se muy bien cómo hacerlo por tiempos, yo también soy nuevo en esto, pero según he entendido, lo que tienes que hacer es que el enemigo al caer, el lugar de cambiar el objeto, cambies el sprite, y luego vuelvas a poner el sprite normal, de esta forma el objeto no se destruirá y se volverá a crear, seguirá siendo el mismo, pero con un sprite distinto
Sí, si entendí la idea y sé que querría poner, pero sin conocimientos del lenguaje estoy en el mismo punto xD.
En evento colisión con otro objeto:
sprite_index (Monstruo_caído)
(algo para que deje de seguir al prota)
(algo para decirle "y al segundo...")
sprite_index (Monstruo)
(vuelve a seguir al prota)
Sé cambiar de sprite, pero no decirle que deje de seguir al protagonista y que al segundo todo vuelva a su cauce.
Cita de: Pejota en Marzo 24, 2014, 11:49:27 PM
Sí, si entendí la idea y sé que querría poner, pero sin conocimientos del lenguaje estoy en el mismo punto xD.
En evento colisión con otro objeto:
sprite_index (Monstruo_caído)
(algo para que deje de seguir al prota)
(algo para decirle "y al segundo...")
sprite_index (Monstruo)
(vuelve a seguir al prota)
Sé cambiar de sprite, pero no decirle que deje de seguir al protagonista y que al segundo todo vuelva a su cauce.
Por eso en el evento create del enemigo creas una variable
caido=false
En el evento step donde supongo que has puesto el codigo con el que se mueven los enemigos pones
if caido=false
{
//codiogo de movimiento del enemigo
}
y donde pones el codigo donde enemigo cambia de sprite a caido pones caido=true y cuando vuelve al sprite de pararse caido=false
He seguido tus pasos y empieza a funcionar, pero claro... hay más inconvenientes. Cómo sigue siendo el mismo monstruo, se sigue chocando con el mismo objeto que lo tira y se queda pillado, además de que se le puede seguir atacando. Habría que modificarle demasiadas cosas y estoy a cero en conocimientos. Tiene que haber un método por Variables para arrastrar la salud actual del monstruo al monstruo placado y de este al nuevo monstruo creado. Aunque este método tire más de recursos, es el más sencillo de implementar.
En realidad como lo pides es mas dificl, si tienes 3 monstruos del mismo tipo y uno se destruye y se crea otro en la misma posicion ¿como sabe gm que su hp pertenece al de monstruo destruido anteriormente y no al de los otros 2? tendrias que identificar las ids de cada monstruos y relacionarlos con la variable hp correspondiente.
Si se sigue chocando haz que el monstruo cuando tenga el sprite caido no pueda ser tocado hasta que vuelva a su sprite original
Cuando creas una instancia nueva a esta se le asigna una ID, puedes usar esa ID para pasar variables. Por ejemplo:
Inst = instance_create(x,y,monstruo_caido);
Inst.Salud = Salud;
instance_destroy();
En este código hipotético creas una instancia de monstruo_caido, guardas su ID en la variable Inst, luego usas dicha ID para cambiar la variable Salud de monstruo_caido al valor de la Salud de la instancia original y la destruyes. Luego puedes hacer lo mismo para pasar la Salud de monstruo_caido al nuevo monstruo:
Inst = instance_create(x,y,monstruo);
Inst.Salud = Salud;
instance_destroy();
Como vez el código es prácticamente igual, solo cambia el nombre del objeto, y con esto estarás pasando el valor de Salud desde el monstruo original, a través de monstruo_caido hasta el nuevo monstruo. Obviamente tendrás que cambiar el código para que se aplique a tu caso.
gortz: Realmente el monstruo de 3 toques sale poco y encima es dificil que se caigan, podía haber pasado del fallo y poca gente se habría dado cuenta, pero no quiero dejar nada rarete por ahí. Aun así me interesa tú método. Porque, aunque mi móvil sea una patata, empieza a petarse cuando guardo la tabla de puntuaciones y cuando entro a verla, la room sale en blanco y tengo que reiniciar el juego para poder hacerlo (lo he probado en un smart III y vá de lujo). Así que me gustaría optimizarlo en todo lo posible cuando ya esté acabado. Pero tampoco sé hacer que solo en ese rato no pueda ser tocado xD
Killer: Tu método funcionó :D
Muchas gracias a los dos :)
P.D. Lo de la pantalla en blanco se vé que era un problema que tenía con la tabla de puntuaciones, ya no ocurre ni en mi patata móvil xD!