Ver la versión completa : ayuda, fallo animacion prota al mover....
Neodreamer
22/12/2004, 22:05
Hola, hasta ahora me habeis ayudado un monton, pero los problemas resurgen...vereis, tengo un prota q se mueve de forma fluida para alante y atras, gira pero cuando le hago moverse en horizontal con otra animacion....se keda en el primer grafico q es el 27 cuando yo le digo q aumente como al avanzar y q si llega al 32 vuelva al 27....pero nada, funciona todo perfecto pero no anima...algun consejo?
CODE.....................................
Process marine()
Begin
ctype=c_scroll;
x=100;y=100;
graph=1;
Frame;
Loop
If (key(_up));graph++; advance(vel);
If(graph>25) graph=1;
End
End
If (key(_down));graph--; advance(-vel);
If(graph<1); graph=25;
End
End
If(key(_left));angle=angle+15000;
graph=4;
End
If(key(_right));angle=angle-15000;
graph=4;
End
//Desde aki es el codigo del movimiento q falla.
If(key(_tab));graph=27;angle=angle+90000;advance(v el);angle=angle-90000;
graph++;
If(graph>32);graph=27;
End
End
//aki seria al contrario, restando graph--;
If(key(_backspace));angle=angle-90000;advance(vel);angle=angle+90000;
End
Licantropo
22/12/2004, 22:19
If(key(_tab));graph=27;angle=angle+90000;advance(v el);angle=angle-90000;
graph++;
If(graph>32);graph=27;
End
End
El problema es que siempre que pulsas tab se pone a 27, y le sumas uno. Solo se tendria que poner a 27 la primera vez.
Prueba con algo de este estilo:
If(key(_tab) && graph<27 );graph=27;angle=angle+90000;advance(v el);angle=angle-90000;
End
If(key(_tab) && graph>=27 );angle=angle+90000;advance(v el);angle=angle-90000;
graph++;
If(graph>32);graph=27;
End
End
Bueno, mira con esto y si te funciona bien, pero puede que te de algunos problemas al pulsar el resto de teclas, pero no se.
Bueno suerte.
Neodreamer
22/12/2004, 22:34
Ha funcionado, gracias...por ello he comprobado q le tengo q añadir mas graficos a esta animacion...me kedo un poko toska....esto de hacer los sprites a mano es jodido dido.....
una cosa, podrias explicarme q es lo q hemos hecho con este nuevo codigo? xq lo he copiado pero sin entender no es solucion ;)
De todas formas, no crea problemas al resto de teclas, al contrario, ahora gracias a esto al pulsar cualquier tecla pone el graph a 27 antes de hacer nada y como esa es la pose original es perfecto....
gracias y 1saludo
Neodreamer
22/12/2004, 22:48
Tenemos problemas....al probarlo en la gp32, si pulso los nuevos botones, el grafico desaparece pero se mueve a la posicion q deberia....
le pongo un frame?
xq pasa esto ahora?
1saludo gracias
Neodreamer
22/12/2004, 22:50
Ja JA Ja.....este ultimo mensaje no lo tengais en cuenta....habia actualizado en la consola solo el dcb pero no el fpg....asik no tenia el grafico actualizado.....ejemmm.....pardilllooooo!!!!
gracias
Licantropo
22/12/2004, 22:59
te explico lo que estaba mal:
If(key(_tab));graph=27;angle=angle+90000;advance(v el);angle=angle-90000;
graph++;
If(graph>32);graph=27;
End
End
Se supone que lo que querias hacer es pulsar la tecla tab y la primera vez comenzar en el grafico 27 y el resto de veces que la pulsases sumar uno al grafico hasta llegar a 32 y volver a ponerlo a 27.
De la forma que lo tenias siempre que pulsabas tab ponias graph a 27 y le sumabas uno, asi que supongo que lo que se te veria seria el graph 28.
Para que no te pase esto tienes que distinguir entre la primera vez que pulsas tab y el resto de veces.
Lo que te puse yo no funcionaria demasiado bien, no pense que lo fueses usar a pelo. No le tienes que añadir mas graficos a la animacion. con los que tiene te vale, pero haz que el grafico 27 y 28 sea el mismo. De esta forma ira bien, creo. Lo que pasa con el codigo que te he dado, es que pulsas la tab por primera vez, lo pone a 27 y luego como estan cerca las dos distinciones pasa tambien por la esa y saltaria al graph 28. Por lo que el 27 no te lo mostraria.
para solucionarlo mete la imagen 27 y 28 iguales y hace que lleguen hasta 33 o algo mas sencillo cambia los if de orden, de esta forma:
If(key(_tab) && graph>=27 );angle=angle+90000;advance(v el);angle=angle-90000;
graph++;
If(graph>32);graph=27;
End
End
If(key(_tab) && graph<27 );graph=27;angle=angle+90000;advance(v el);angle=angle-90000;
End
Bueno espero que te sirva, y si necesitas mas ayuda no dudes en preguntar. :brindis:
Es una observacion personal:
Antes de empezar a programar sería bueno estudiar un poco de metodología de la programacion. Ya se que es mucho rollo pero ayuda mucho. Yo empecé a programar por mi cuenta pero cuando empecé con metodología aprendí mas del doble de lo que sabía en la mitad de tiempo. Y creedme; es muy facil.
Por ejemplo; para mover personajes medianamente complejos puedes utilizar una variable llamada estado, de manera que en cada estado nos despreocupamos de los efectos que pueden ocasionar teclas pulsadas en otros estados.
//estados
//0-quieto
//1-andando a la izquierda
//2-andando a la derecha
//3-agachado
IF(estado==0)
...
aqui van las animaciones o el grafico que quieras poner
...
if(key(_left) and not key(_right) and not key(_down)) estado=1; end
if(key(_right) and not key(_left) and not key(_down)) estado=2; end
if(key(_down) and not key(_right) and not key(_left)) estado=3; end
END
IF(estado==1)
...
aqui van las animaciones o el grafico que quieras poner
...
if(key(_left)) x-=5; end
if(key(_right)) estado=0; end
if(key(down) estado=3; end
END
IF(estado==2)
...
aqui van las animaciones o el grafico que quieras poner
...
if(key(_right)) x+=5; end
if(key(_left)) estado=0; end
if(key(down) estado=3; end
END
IF(estado==3)
...
aqui van las animaciones o el grafico que quieras poner
...
if(not key(down) estado=0; end
END
Si os fijais; de esta manera el personaje anda y se agacha pero si pulsamos las teclas izquierda y/o derecha mientras esta agachado no caminará; además de no mostrar ninguna animacion del personaje corriendo si pulsas a la vez izquierda y derecha.
De todas formas en la GP32 no existe esta problema puesto que el joypad no permite señalar arriba y abajo a la vez o izquierda y derecha a la vez; sin embargo como ejemplo didáctico está bastante bien ¿no?.
Los juegos de lucha utilizan metodos similares; por ejemplo, si la variable estado es local a cada proceso al golpear al enemigo puedes ordenarle que cambie su estado a otro en el que muestre una animacion del personaje resintiendose; ¡Hechadle imaginacion y movereis el mundo!.
Ya que me he currado la respuesta la voy a poner en un post a parte para que lo lea mas gente. :abeber:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.