de cabeza con XGRAPH (SOLUCIONADO)

Started by DIVer, April 02, 2014, 12:23:59 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DIVer

Puede alguien echarme un cable? Estoy con un juego en perspectiva isométrica
(tipo fallout,neverwinter,etc) en el que los personajes tienen 8 vistas segun su ángulo y se mueve
con los cursores del teclado.
La primera cuestión es que no consigo que el personaje controlable vaya en su gráfico diagonal
al pulsar,por ejemplo ARRIBA+DCHA. Como estoy gestionando el grafico con XGRAPH, intenté arreglarlo
primero con "write_int" para ver que valor tomaba el ángulo al cambiar de direccion:
efectivamente,avanzando en diagonal seguía con el mismo valor que la direccion ARRIBA(90000).
Con mis escasos conocimientos, trate de solventarlo con un IF (key(_up AND _right)) angle=45000;
TACHÁN! lo arregle? NO! que pasa cuando voy hacia arriba? que el valor ANGLE toma el de la diagonal
y va con ese gráfico. He probado a cambiar las sentencias IF de las teclas con AND NOT y AND según
me convenga y me arroja errores de código de key inexistente.
Conseguí arreglarlo cambiando el control del personaje al estilo de "Resident Evil" o coche de mando
(IZDA-DCHA cambia valor de angle y ARRIBA-ABAJO avanza el proceso), pero no es lo que tenía en mente...
Espero haberlo explicado bien, no duden en pedirme que aclare cualquier punto (el juego será opensource así
que puedo colgar código sin problemas).
Y la segunda pregunta... creo que será mejor que me la guarde para cuando arregle el asunto que me ocupa ahora.
HELP!I NEED SOMEBODY! Muchas gracias por adelantado.
"We need more Quake1" - Theodore Roosevelt

laghengar

Puedes usar un sistema de banderas, como poner una variable cuyos bits indiquen que tecla está activa, y luego con switch establecer el ángulo dependiendo del valor de la variable.

Con esto te evitas que hayan teclas más importantes que otras, que es lo que pasa cuando usas if, y puedes hacer un sistema de anulación cuando se pulsa también la tecla contraria.

VAR_TECLAS = 0;

Si ARRIBA está pulsada, VAR_TECLAS+=1;
Si DERECHA está pulsada, VAR_TECLAS+=2;
Si ABAJO está pulsada, VAR_TECLAS+=4;
Si IZQUIERDA está pulsada, VAR_TECLAS+=8;

switch(VAR_TECLAS)

case 1: ángulo=90000;
case 2: ángulo=0;
case 3: ángulo=45000;
case 4: ángulo=270000;
case 6: ángulo=315000;
case 7: ángulo=0;
case 8: ángulo=180000;
case 9: ángulo=135000;
case 11: ángulo=90000;
case 12: ángulo=225000;
case 13: ángulo=180000;
case 14: ángulo=270000;

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

DIVer

Muchas gracias por tu tiempo laghengar, me lo has explicado muy bien y un newbie como el menda valora mucho eso.en cuanto pueda tratare de implementar tu codigo. vi algo parecido por este mismo cuarto, en las ultimas paginas, que usaba el sistema del teclado numerico, pero no estaba muy claro para alguien de mi entendimiento.
"We need more Quake1" - Theodore Roosevelt

DIVer

 ;D Funcionó como un conjuro!! gracias a usted tengo por fin al prota rotando con las teclas WASD. para tener el codigo mas manejable de momento tengo  tu switch como un proceso que llamé "gps".Ahora tengo que iniciar las animaciones correspondientes al angulo que tome. Me ha llamado la atención el metodo que tambien pusieron por aquí: el array del tokenkai, en el que las filas son los graficos para cada vista(como lo tengo yo) pero añadiendole columnas que son las animaciones propiamente dichas. No te voy a pedir que ahora me digas como animar las cosas pero,por favor, dime simplemente si voy bien encaminado o me pierdo (sin dolor no hay honor jeje). En caso de estar mal encaminado con el array, me sugerirías otro switch en plan maquina de estado?Mil gracias.
PD: donde está el boton del karma en este foro?
"We need more Quake1" - Theodore Roosevelt

laghengar

No vas mal :) lo del array para animaciones me parece buena idea. En vez de hacerle proceso hazle función, junto con el array funcionarán muy bien para cualquier objeto y personaje. Los procesos crean muxhos recursos que no vas a necesitar.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

DIVer

#5
Quote from: laghengar on April 04, 2014, 12:29:10 PM
No vas mal :) lo del array para animaciones me parece buena idea. En vez de hacerle proceso hazle función, junto con el array funcionarán muy bien para cualquier objeto y personaje. Los procesos crean muxhos recursos que no vas a necesitar.
Buff, por fin he conseguido animar al personaje en todas sus vistas con esta variable (he estado a punto de llorar por aquí mas de una vez). O no pasaba nada o solo avanzaba un frame o giraba como loco.
El problema era que estaba complicando lo sencillo y es así (mi primer aporte, que bien!):
xgraph=&tutabla[(tuvariable++/nº de filas de tu tabla)*nº de frames hasta siguiente grafico.
Así nos hara el recorrido de la matriz de animacion en horizontal y vertical.

En mi caso lo tengo así:
program juego
global
vistas[]=
1,7,13,-7,-1,-25,19,25
2,8,14,-8,-2,-26,20,26,
3,9,15,-9,-3,-27,21,27,
4,10,16,-10,-4,-28,22,28,
5,11,17,-11,-5,-29,23,29,
6,12,18,-12,-6,-30,24,30;
begin
...

process player
private
num_frame//variable para asignar el grafico de la animacion
begin
loop
if(num_frame==30)//si excede el total de gráficos de la animación...
num_frame=0;//...la reinicia
else
xgraph=&vistas[(num_frame++/5)*9]
end

espero que ayude.Así que tema resuelto, gracias una vez mas a la inestimable ayuda del compañero Laghengar.

"We need more Quake1" - Theodore Roosevelt

laghengar

Creo que te has confundido al poner aquí esta línea:

xgraph=&vistas[(num_frame++/5)*9]

Así tal cual no entiendo como te puede funcionar o_O
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

DIVer

#7
Quote from: laghengar on April 08, 2014, 07:46:38 PM
Creo que te has confundido al poner aquí esta línea:

xgraph=&vistas[(num_frame++/5)*9]

Así tal cual no entiendo como te puede funcionar o_O
Sorry,habras podido comprobar en mis post que tengo problemas de expresion escrita.es que me emociono y me atotoroto.
Lo sustituyes por los nombres tuyos y voilá."vistas" es mi tabla de animacion, "num_frame" es una variable que uso porque no puedo usar graph junto con xgraph y lo que hace es avanzar(++) dividido entre nº de frames que componen la animacion de UNA direccion(en mi caso 5 porque la animacion de correr a la derecha es 1,2,3,4,5,6 y el 0 se cuenta.fijate en la matriz)multiplicado por el nº de saltos(?no se expresarlo mejor) que debe avanzar el bucle para mostrar la siguiente animacion.Es decir en la matriz desde el grafico 1 tiene que moverse 9 pasos para encontrar el grafico 2 y no salir mirando pa cuenca mientras corro a la derecha, por ejemplo.
No se si lo aclare o lo empeore, pero esto me salio casi sin querer y consigue con esa simple instruccion animar al personaje automaticamente en todas sus 8 o las direcciones que sea y me ahorro el asignar vista por vista su animacion correspondiente.
Piensa en una "sprite sheet" de animaciones y un bucle que la recorra horizontal y verticalmente.
si sigue turbio dimelo, que mañana saco tiempo y subo un ejemplo con un par de graficos para que lo compilen si gusta.

editado para corregir algunos errores.
"We need more Quake1" - Theodore Roosevelt

laghengar

Lo he entendido amigo, muchas gracias. No he usado nunca xgraph ya que al conocerla no he hecho nada que obligue usarla. Me alegra que te haya ido bien :).
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O