Febrero 06, 2012, 06:18:43 PM Ultima modificación: Febrero 18, 2012, 11:14:52 AM por Sdo.Ivan
hola a todos...vereis me surge una duda.....tengo este codigo

if(keyR){
sprite_index=soldado_01_recargando;}


la cuestion es que el sprite "soldado_01_recargando" es una animacion que dura un segundo aprox.....pero no se reproduce....solamante se reproduce el primer frame....luego tambien a parte...tengo una variable que se laama disparar=true...que he usado para que cuando esta corriendo no pueda disparar poniendola en false....mi pregunta es...¿como hago para que cuando se aprete la "R" se reproduzca la totalidad de la animacion(unos 30 frames) y durante esa animacion no se pueda disparar? un saludo y gracias

Tu problema (puede) estar en la variable "image_speed" que es la velocidad con la que se reproduce una animación, si tienes 30 Frames (y tu juego corre a 30fps) entonces pon esta velocidad en 1 para que dure un segundo la animación:

if(keyR){
    sprite_index = soldado_01_recargando; //Cambiamos el sprite
    image_speed = 1; //Cambiamos la velocidad de animación
    disparar = false; //Cambiamos la variable de disparo.
}


Ahora en tu codigo para disparo debes poner al comienzo:

if (disparar == false){ exit; }//Esto evitara que se ejecute mas código y evita que puedas disparar.




Ahora, si tu problema no se resuelve con lo dicho, hay varias cosas que pueden estar pasando:

1. Estas cambiando el sprite en otro pedazo de código, lo que hace que se reinicie las animaciones y solo puedas ver un frame.

2. en algún lugar de tu código puedes estar manipulando un "image_index = 0" lo que también te causa ese efecto.


Te aconsejo que revises que no estas cambiando de sprites, en otro lado ni nada que pueda alterar la ejecución de la animación.


Saludos  8)

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


sigue sin funcionar....veras...el codigo es este

keyR=keyboard_check(ord("R"))

if(keyR){
    sprite_index = soldado_01_recargando;}


doy por hecho que apreto una vez la R y durante un step se reproduce la animacion (solo durante un step,algo casi inapreciable),con lo cual para descartar posibles fallos en el resto de codigo he probado con esto (solo para comprobar si hay algun fallo en otro sitio)

keyR=keyboard_check_pressed(ord("R"))

if(keyR){
    sprite_index = soldado_01_recargando;
    disparar=false;}


de esta manera si dejo pulsada la R (todo el rato) la animacion se reproduce correctamente y manteniendo la r pulsada si intento disparar pues no lo hace...ya que disparar=false....con lo cual deduzco que el primer codigo que he puesto no es la manera de hacerlo...quizas con alarmas pero no consigo averiguar como.igualmente muchas gracias...seguire investigando.

todavia ando liado con esto y no encuentro solucion intente algo asi....en el step


if(keyR){
if disparar=true{
disparar=false alarm[0]=30;}}


y en la alarma 0
disparar=true

esperando que durante 30frames(1 segundo) disparar fuese igual a false y asi no poder disparar mientras recarga....y asi no es.....pero tampoco se como hacer que la animacion de disparar se ponga  en marcha....alguna idea

bueno....voy avanzando....basandome en unos tutoriales de Jucarave que hay en youtube (mis felicitaciones a Jucarave,eres todo un maestro) he conseguido hacer algo que se aproxima muchisimo a lo que realmente quiero,solo con un pequeño inconveniente....me explico.

basandome en uno de los tutoriales y llevando lo que alli se explica a mi juego he creado algo.en el evento create del soldado_01 he puesto
recargar=0;
y en su correspondiente step
if(keyR){
if recargar=0{
recargar=60;}}

if (recargar>0){sprite_index=soldado_01_recargando;recargar-=01;}


lo que hace esto es que cuando pulsas R  la variable recargar se pone en 60 y que cada step que pasa valla disminuyendo 1 hasta llegar a 0,y que mientras sucede esto se reproduzca la animacion "soldado_01_recargando".una vez que llega a 0 ya no se reproduce.las dudas que me surgen son 2:

1-teniendo en cuenta que el sprite"soldado_01_recargando" tiene 60 sub-imagenes ¿porque no coincide con el valor 60 que le doy a la variable?cuando apreto R se reproduce la animacion pero deja de reproducirse un poco antes de llegar al final.

2-seguramente por el error comentado en la duda numero 1...cuando vuelvo a apretar R la animacion se reproduce justo desde la sub imagen en la que se quedo la ultima vez que se rerpodujo.

¿alguna idea?  gracias de ante mano.

Hola me alegro que te hayan gustado mis tutoriales, en cuanto a lo que mencionas puede ser lo siguiente:

lo de que la animación se te reproduce por segunda vez en la imagen que quedo la ultima vez, podrias solucionarlo de la siguiente manera, cuando aprete la tecla y ponga recargar=60, has que la imagen inicial sea 0:

if(keyR){
    if recargar=0{
        recargar=60;
        image_index = 0; //Inicia la animación en el subimagen 0
    }
}

if (recargar>0){sprite_index=soldado_01_recargando;recargar-=01;}


si no se te arregla lo de que se detiene antes de llegar al final de la animación puedes probar cambiando ese numero digamos 63 o 66.



Saludos.

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


que grande...funciona a la perfeccion...quizas tenga que reajustar el 60 por otro numero,pero ya lo hare(basicamente porque las animaciones que tengo son muy mejorables y aun no son las definitivas)pero ahora si que empieza siempre desde el principio de la animacion.mil gracias te dejo un ejemplo de por donde van mis avances para que veas que he usado casi todo de tus tutoriales de youtube (llevo todo el finde semana mirandolos....mi mujer me va a dejar  :-[ ) mil gracias

bueno vereis....vuelvo a abrir el hilo porque aunque en un principio pensé que estaba solucionado,a la que he ido incrementando cosas al codigo ya no hace lo que me gustaria que hiciera....os pego el codigo y ahora me explico

en el create

recargando_normal=0;                                                 ///variable animacion recargar normal
recargando_apuntando=0;                                                 ///variable animacion recargar apuntando
disparando_normal=0;                                        ///variable animacion disparando normal
disparando_apuntando=0;                                        ///variable animacion disparando apuntando
apuntando=false;                                             ///variable modo apuntando-normal
disparar=true;                                                ///variable disparar si o no
balas=300;                                                    ///variable municion


en el step (la parte que no me funciona)

///modo apuntando-normal

if(keyAlt) {
if apuntando=false{
apuntando=true;}
else{
apuntando =false;}}

if apuntando=false{
sprite_index=soldado_01_parado_normal;}

if apuntando=true{
sprite_index=soldado_01_parado_apuntando;}

///recargando normal

if(keyR){
if apuntando=false{
if recargando_normal=0{
disparar=false;
recargando_normal=60;
image_index = 0;}}}

if (recargando_normal>0){sprite_index=soldado_01_recargando_normal;recargando_normal-=01;}

if (recargando_normal=0){disparar=true;}

if (recargando_normal)<0{recargando_normal=0;}

///recargando apuntando

if(keyR){
if apuntando=true{
if recargando_apuntando=0{
disparar=false;
recargando_apuntando=60;
image_index = 0;}}}

if (recargando_apuntando>0){sprite_index=soldado_01_recargando_apuntando;recargando_apuntando-=01;}

if (recargando_apuntando=0){disparar=true;}

if (recargando_apuntando)<0{recargando_apuntando=0;}


ahora me explico  ;)

mi player "soldado_01" consta de varias animaciones...ademas consta de dos formas de ser vastante diferenciadas...mientras esta en un estado "normal" y/o mientras esta en el estado "apuntando"...mi problema surge a la hora de recargar su fusil tanto en el estado"normal" como en el estado"apuntando" lo que he querido hacer es que mientras esta recargando(animacion que dura 60steps,2 segundos) no pueda disparar.y no se muy bien donde esta el fallo pero segun lo que hice la variable "disparar" siempre es true con lo cual a mitad de animacion si apreto "space"(disparar) la animacion se corta y el player dispara.

con lo cual

¿donde esta el fallo para que mientras dure la animacion de recargar(tanto si esta apuntando como si no)la variable disparar sea false y cuando acabe esa animacion vuelva a ser true?

mil gracias