Hola, tengo otra nueva duda xD , como puedo hacer que cuando muera un enemigo o mi personaje principal , que se cambie el sprite al sprite de muerto y luego desaparezca al terminar la animacion? lo he intentado de varias maneras pero las entidades que le pongo a un objeto se cumplen instantaneamente , desaparece el objeto antes de que se vea la animacion y no se ve nada x.x
si alguien conoce alguna manera o tiene algun ejemplo que me pueda ayudar muy agradecido :)
prueba creando un objeto llamado:
obj_muerto
a ese objeto asignale la animacion de morir, y en el evento end animation ponle el d&d drestoy self
ahora cuando se cumplan las condiciones de muerte de tu personaje llamese vidas barra o lo que gustes. ponle un instace_change o con el D&D por la de obj_muerto, pero tambien dependeria si muere en el aire, agua o alguna otra cosa.
hice lo que me dijiste, me hice un objeto (obj_dead) y lo configure de la siguiente manera :
[gml]
evento create
image_speed=1
gravity_direction=270
gravity=0.5
evento colision con el piso
hspeed=0;
evento animation end
instance_destroy()
room_restart()
[/gml]
pero la animacion se reproduce demasiado rapido y no empieza en el mismo lugar donde estaba el personaje sino que al lado...
para cuando se muere porque se cayo puse esto:
[gml]//si cae a un hoyo.
if y > room_height
{
if lives >0
instance_change(obj_dead,1)
{lives-=7; x=xstart; y=ystart; dead=true; alarm[1]=1*room_speed;}
else
if lives <1
instance_destroy()
sleep(1000);room_restart();
}
[/gml]
pero no me muestra la animacion de muerte y me reinicia la room automaticamente. a que se pude deber?
[gml]
//Cuando muera por un enemigo.
//Esto reinicia el room, por lo que tu personaje aparecer? donde apareci? cuando empezo el room, osea que donde lo pusiste para empezar.
//En otras palabras en: x = xstart; y = ystart;
room_restart()
//Si quieres que la animacion se reproduzca mas lenta asignale un numero menor a 1 a:
image_speed = 1
//Cuando cae en un agujero
//Estaba medio desordenado, yo te lo ordene un poco.
if y > room_height
{
if lives > 0
{
instance_change(obj_dead,1)
}
}
else
{
instance_destroy()
sleep(1000)
room_restart()
}
//Esto no se porque lo pusiste, no veo que funcion cumple, ya que cambia el objeto, por ende no va a servir de nada. Pero tu sabes para que lo pusiste, asi que ponlo donde va, pero no borres nada, asi deberia funcionar.
{lives-=7; x=xstart; y=ystart; dead=true; alarm[1]=1*room_speed;}
[/gml]
lo logre hacer?? , pero sigo teniendo un error, mi personaje al caer muere y pierde una vida, pero cuando las pierde por haber colisionado con el enemigo realiza la accion de morir pero la vida no se le resta. x.x
lo trate de solucionar asi:
Evento Colision con el enemigo
[gml]
if dead=false // si personaje esta vivo
{
if health>0 {health-=1;} // si la energia esta mayor que 0 reducimos 1 punto de energia
else {dead=true;} // si la energia esta igual o menor que 0 hacemos que muera
}
//Si quieres que el jugador se mueva un poco para atras por las dudas pon:
x = x - 32
//Y lo que debes poner si o si(Que el enemigo se destruya) es:
with other
{
instance_destroy()
}
[/gml]
en este caso mi personaje pierde toda su salud pero no se le restan vidas..
En donde le estas poniendo el {lives -= 1} que le restaria la vida?
[gml]
if dead=false // si personaje esta vivo
{
if health>0 {health-=1;} // si la energia esta mayor que 0 reducimos 1 punto de energia
else {dead=true;} {lives-=1} // si la energia esta igual o menor que 0 hacemos que muera
}
[/gml]
ahora le pegan 3 veces y se muere .. xD .. estoy un poco confundido, quiero que al chocar con el enemigo pierda 1 de health , y que si llega a chocar y le queda un punto de vida , muera, pero no se como escribirlo..
[gml]
if dead=false
{
if health > 0
{
health -= 1;
}
else
{
dead = true;
lives -= 1;
}
}
[/gml]
Prueba ahi
ocurre lo mismo , sera por un asunto de variables? la verdad que me pillo el asunto, seria posible mandarte el editable para ver si lo puedes arreglar?
No te garantizo poder hacerlo, pero mandamelo si quieres :)
PD: Adjuntalo aqui, asi si yo no puedo, cualquier otro podra probar y hacerlo :D
ok, muchas gracias :P lo subi
Vi un par de errores con respecto a las variables health y lives, ya arregle todo creo.
Cuando mueres vuelves al lugar donde empiezas, y cuando pierdes todas las vidas vas al menu.
Hice algunos cambios, no te se decir cuales son exactamente como para que los apliques en lo que ya tienes, asi que te dejo el editable.
Obviamente no toque nada que no tenga que ver con estas variables en tu juego, asi que todo esta perfectamente como estaba antes, de esto no te preocupes :)
de verdad no se como darte las gracias , podria ser que cuando necesites sprites me avisas y te los hago .. ? me podrias explicar cuales eran los errores?, porque no gano nada sin entender que fallaba... de verdad muchas gracias??
como puedo hacer que al perder las vidas aparezcan todos los enemigos de nuevo?
Voy a poner los objetos en color: Rojo
Voy a poner los eventos en color: Verde
Kamen
"Create"
[gml]
//Guardar las variables (En variables globales) x e y que tiene el objeto cuando empieza.
global.xinicial = x
global.yinicial = y
[/gml]
"Colision --> obj_enemy"
[gml]
//Solo cambie de la linea 7 hasta la linea 18 (Del original que tu dejaste) y las cambie por esto.
if dead=false
{
if health > 0
{
health -= 1;
}
if health <= 0
{
lives -= 1
}
}
[/gml]
"No more lives": ELIMINADO
obj_dead
"No more lives": AGREGADO
[gml]
//Show information: (Porque esta con D&D, porque el nombre del room no me dejaba ponerlo en code (Pero dejalo asi, asi anda, a menos que lo quieras cambiar, es tu juego, sos libre de cambiarlo, obvio))
//sleep 1000 milliseconds; redrawing the screen: true
//go to room menu with transition effect Fade out and in
[/gml]
"Animation End"
[gml]
health=7;
instance_create(global.xinicial,global.yinicial,Kamen);
Kamen.dead=true;
Kamen.alarm[1]=1*room_speed;
instance_destroy()
[/gml]
obj_deadaltura
"No more lives" AGREGADO
[gml]
//Show information: (Porque esta con D&D, porque el nombre del room no me dejaba ponerlo en code (Pero dejalo asi, asi anda, a menos que lo quieras cambiar, es tu juego, sos libre de cambiarlo, obvio))
//sleep 1000 milliseconds; redrawing the screen: true
//go to room menu with transition effect Fade out and in
[/gml]
"Animation End"
[gml]
health=7;
instance_create(global.xinicial,global.yinicial,Kamen);
Kamen.dead=true;
Kamen.alarm[1]=1*room_speed;
instance_destroy()
[/gml]
Cita de: shaggymon en Octubre 13, 2011, 12:31:42 AM
como puedo hacer que al perder las vidas aparezcan todos los enemigos de nuevo?
Al perder todas las vidas va al menu, por lo que la room se resetea, vuelve a entrar y estaran todos los enemigos.
La verdad que me gusta mucho este juego, le veo futuro!
+1 Karma! y a amigos :)
Gracias???? :D
Pero como lo puedo hacer para que cuando mi personaje perdiera una vida estuvieran todos los enemigos nuevamente , como en megaman ?? , le puse room_restart al obj_dead en el evento animation end pero pasa algo raro xD
Ya esta, te lo dejo en editable asi es mas rapido.
Cree un nuevo objeto que cree las variables health y lives en el menu para que no se cambien dentro del juego. Despues hice que al morir el personaje reaparezca en la room (Guardando la room en la que pasa en una variable global).
Cualquier cosa, abre los dos y mira los cambios, son minimos.
ahora si??? muchas gracias de verdad ??? no encontraba una forma de hacer que funcionara, me costo hartos quebraderos de cabeza porque lo de GML no es lo mio xDD , nuevamente muchas muchas gracias??
ahora tengo una duda xD , para que sirve [gml]global.ultimoroom = room[/gml]
se que las variables globales son persistenes en todas las rooms, pero el resto no lo entiendo muy bien..
No lo aclare bien en el comentario, tienes razon.
Bueno, lo que hace esto es:
- Guardar el nombre de la room actual en la variable global.ultimoroom (Actualizandose cada vez que se entra en una room).
Para que? Para despues, en el evento "Animation End" (De los objetos de muerte), en vez de solo volver al jugar a la posicion inicial (Lo que dejaria a los enemigos destruidos) hace que el personaje se mueva a la misma room (Osea, te "reinicia" la room), para conservar las variables de vida pero el room se reinicie para que los enemigos aparezcan.
Por eso lo unico que cambie fue agregar eso al evento "Room start" del objeto Kamen y modificar el evento "Animation end" de los objetos de muerte por esto:
[gml]
room_goto(room)
health=7;
Kamen.dead=true;
Kamen.alarm[1]=1*room_speed;
instance_destroy()
[/gml]
PD: Si no me equivoco en esta modificacion fue la que agregue otro objeto llamado Asginador_Variables en las que declara health y lives en el menu, para que no se modifiquen por mas que entres en los diferentes niveles.
Ahora entendi todo .. :D
Cita de: shaggymon en Octubre 14, 2011, 08:50:35 PM
Ahora entendi todo .. :D
Buenisimo :D
Cualquier duda haz un nuevo post con tu nueva duda, voy a estar pendiente de este juego, me gusta mucho, mucha suerte! :D