duda sobre un bucle para un juego de lucha

Started by Hola, February 04, 2013, 08:17:39 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hola

hola, como estan, estoy haciendo un juego de lucha en fenix tipo street fighter, y keria saber si me pueden dar un ejemplo basico para hacer bucles repetidos, es decir, por ejemplo el personaje tiene graficos de posicion, y al apretar una tecla hace un golpe, pero si la suelto y la apreto seguida esa tecla cuantas veces kiera, k no flashee el grafico uno, o sea si los graficos de golpe son por ejemplo 13 y 14, al soltar la tecla de golpe y apretarla rapidamente k no flashee el primer grafico de posicion, sino como los golpes de street fighter, k sea 13, 14, 13 , 14 y asi, no he podido lograrlo, estaba usando en el proceso del personaje una forma basica con for, la misma k se se uso en el platafor, no se si se acuerdan del juego del muñequito de div2, si alguien me podria poner un ejemplo basico para k repita de esa manera kuantas veces kiera sin flashear el primer grafico al terminar el golpe le agradeceria, salu2.

laghengar

Posiblemente funcione haciendo que en cuanto sueltes la tecla vaya al 13, y después en el siguiente frame acabe en el gráfico normal.

O también que compruebe en cual está cuando se suelta la teclas: si está en el 14 que pase al 13, si está en el 13 que pase al normal.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

fulgorelizz

 8) hola chico!! bienvenido a la comunidad, bueno te dare una idea que es bastante util en tu caso, puedes usar una variable local declarada desde el programa principal , en tu caso fenix desde program LOCAL estado=0, esta variable indicara que el personaje esta neutro luego deberas definiar valores estandares para cada estado, te pongo un ejemplo

process personaje()
begin
   //declaraciones para scroll u otras cosas
   estado=0;//posicion de combate
   while('este vivo mi personaje')

//en caso de no haber presionado ninguna tecla de accion pon el estado a 0
if(estado<>0) // pero hazlo si ves que estabas en otro estado
if(!key(_left) and !key(_right) and !key(_x) .....)
  estado=0;//posicion de combate
end
end


if(key(_k))
  estado=5;//puño debil o x movimiento
end

//si esta en posicion de combate   
if(estado==0)
  if(graph<13 or graph>14)//y su grafico no esta en el rango de animacion
     graph=13;//asigno el grafico inicial de la animacion de posicion de combate
  end
  graph++;if(graph>14)graph=13;end //ta asignado lo incremento, y si ha superado el grafico de la animacion, iniciala de nuevo
end

//si he presionado k verifico las acciones del estado
if(estado==5) //estado del puño
//los graficos20 al 22 son graficos de ejemplo
if(graph<20 or graph>22) //
graph=20;
end
graph++;
if(graph>22)estado=0;end//si he llegado al final del movimiento vuelvo al estado 0 o posicion de combate
end //fin estado 5


frame;
end // loop
end // begin

cabe destacar que de esta manera podras programar los collision y ahorrarte unas cuantas lines de trabajo, tambien te recomiento que los movimientos ciclicos los pongas en el fpg, ejemplo, si tu movmimiento de combate va del 1 al 5 y en el 5 hay un salto brusco al 1 (esto es algo solo visual) , coloca un grafico 6 y un 7 de ser posible que sean graficos de transicion, para que el movimiento ciclico sea agradable a la vista!!....

si tienes alguna otra duda puedes preguntar!!  8)
Compiling code -- generating exe...

Hola

hola fulgorelizz, como andas, gracias por la ayuda, pero estaba usando ese metodo basico del platafor k empieza, con for, no se si recordaras:


for(graph=pri_cuad; graph<=ult_cuad; graph=graph+1);


//y ahi es donde comienzan los pri_cuad no se si te acordaras del juego, yo ponia el pri_cuad a 0 y a veces no flasheaba pero a veces si


pri_cuad=0 ult_cuad=20//ejemplo


mi pregunta es ¿el ejemplo k me diste tambien funciona con este metodo del platafor o tengo k hacerlo sin el for, pork kon este metodo probe un while, y un if si se soltaba la tecla y flasheaba, tu metodo todavia no lo probe pero funciona igual con el for o tengo k hacer ese metodo k me dijiste sin el mismo, o sea comenzando de nuevo sin utilizar el for en el proceso?

fulgorelizz

Quote from: Hola on February 07, 2013, 06:17:01 PM
hola fulgorelizz, como andas, gracias por la ayuda, pero estaba usando ese metodo basico del platafor k empieza, con for, no se si recordaras:


for(graph=pri_cuad; graph<=ult_cuad; graph=graph+1);


//y ahi es donde comienzan los pri_cuad no se si te acordaras del juego, yo ponia el pri_cuad a 0 y a veces no flasheaba pero a veces si


pri_cuad=0 ult_cuad=20//ejemplo


mi pregunta es ¿el ejemplo k me diste tambien funciona con este metodo del platafor o tengo k hacerlo sin el for, pork kon este metodo probe un while, y un if si se soltaba la tecla y flasheaba, tu metodo todavia no lo probe pero funciona igual con el for o tengo k hacer ese metodo k me dijiste sin el mismo, o sea comenzando de nuevo sin utilizar el for en el proceso?

He notado algo;pri_cuad=0; pero al hacer for(graph=pri_cuad ..... va a hacer flasheo ya que en los fpg no existen graficos 0  :) asi que pri_cuad=1 te vendria mejor!! prueba a ver que tal!! siempre que pri_cuad sea distinto de 0 no deberia flashearte  8)
Compiling code -- generating exe...

Hola

hola, perdon por la demora en la contestacion, es k estaba probando un monton de metodos para k esto funcione y basicamente encontre dos por ahora, segun lo que dices fulgorelizz el pri_cuad 0 deberia flashearme, pero lo he probado un monton de veces y no flashea, es decir si flashea pero depende donde lo pongas, el 0 es como una repeticion del ultimo grafico en algunas ocasiones en otras te pasa al primero, para completarlo hay k hacer lo siguiente, les dejo esta informacion para el que kiera hacer repeticiones usando el for, segun en mi opinion usando esto es mas facil hacer las combinaciones de teclas, los movimientos, etc.




//en este ejemplo los graficos 63 y 64 son graficos del golpe y del 1 al 20 la posicion////
//ejemplo 1////


process personaje.....


private
pri_cuad=0;   //es importante el uso de constantes ya k sino puede saltarnos al 1er                         
ult_cuad=20;  //grafico de posicion, lo pondremos a 0 como referencia para no   
begin              //confundirnos


for(graph=pri_cuad; graph<=ult_cuad; graph=graph+1);


pri_cuad=0; ult_cuad=20;  //el pri_cuad debajo del for siempre debe estar a 0, ya k
                                        //eso nos ayudara a una repeticion parcial, y  no                 
                                         //saltara al primer grafico


while(key(_x) and estado==0);  //cuando apretamos la tecla va al estado 1 para k
estado=1;                                //no haya repeticiones, y muestra los graficos
from graph=63 to 63;
frame(300);
end
end


if(not key(_x) and estado==1);  //cuando soltamos la tecla y esta en el estado=1
estado=0;                                //pasa al 0


if(graph>20 or graph<=2);      //cuando soltamos si es mayor k el ultimo grafico
graph=64;                            //de posicion o si es menor e igual k el segundo,
end                                    //pasa al grafico 64, sirve para k al soltar no lo haga
end                                   //el grafico en la posicion


if(graph>=64);          //y por ultimo si el grafico es mayor igual k 64, ponemos
ult_cuad=65;             //y esto es importante no poner graph, sino ult_cuad
end                           //ponemos ult_cuad a un grafico mas en este caso 65


                     
frame;
end
end
end


///ejemplo 1////


//en el ejemplo anterior es importante k se aprendan el uso de los pri_cuad y //fundamentalmente los ult_cuad, si kieren k el graph 65 por ejemplo no sea //diferente al 64 pueden repetir el grafico poniendo el mismo como 65 en el fichero //y listo, de ese modo no pasara a la posicion despues de haber terminado el //ult_cuad y menos si soltamos y apretamos la tecla








y el 2do ejemplo, es poniendo en el fichero el primer grafico k sea el del golpe y del 2 al 20 la posicion, o sea en el 1er grafico del fichero tenemos un grafico del golpe bajo por ejemplo, el final de ese golpe  del 2 al 20 la posicion,  luego el proceso es casi lo mismo nada mas k sin poner ult_cuad al final, por ejemplo asi:
///ejemplo 2///



process personaje.....


private
pri_cuad=2;   //en este caso para k no empiece del atake lo empezamos aqui del 2                       
ult_cuad=20; 
begin             


for(graph=pri_cuad; graph<=ult_cuad; graph=graph+1);


pri_cuad=0; ult_cuad=20;  ///recuerden para una repeticion parcial este
                                     //pri_cuad siempre debe estar a 0

if(graph>=20)   //al ser mayor y ademas igual a este no salta al 1er grafico, k es el             
graph=2;         //[size=78%]del atak, sino al 1ro de posicion, o sea el grafico 2[/size]
end


while(key(_x) and estado==0);  //cuando apretamos la tecla va al estado 1 para k
estado=1;                                //no haya repeticiones, y muestra los graficos
from graph=63 to 63;
frame(300);
end
end


if(not key(_x) and estado==1);  //cuando soltamos la tecla y esta en el estado=1
estado=0;                                //pasa al 0


if(graph>20 or graph<=2);      //cuando soltamos si es mayor k el ultimo grafico
graph=64;                            //de posicion o si es menor e igual k el segundo,
end                                    //pasa al grafico 64, sirve para k al soltar no lo haga
end                                   //el grafico en la posicion




                     
frame;
end
end
end


////ejemplo 2///




espero les sirva, y gracias por la ayuda, en el for no me permite definir la posicion como estado, por ahi funcionaria en el modo k ustedes dicen si en vez de for utilizara todos estados, aunque algo de lo k me dijeron ustedes lo puse, fijense en la parte de soltar la x, y bueno de nuevo espero les sirva, gracias, y suerte.

fulgorelizz

como vas con esto?? tenia siglos que no pasaba por aca!! mi demora fue epica!! culminaste el proyecto?=?
Compiling code -- generating exe...