Efecto Giro

Started by DIVer, November 21, 2014, 05:48:45 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DIVer

Tengo la animacion (en sprites) para que el personaje gire sobre si antes de caminar/correr en otra direccion... pero me esta costando la vida implementarlo. Son solo 4 frames o asi, pero... bufff, he probado ya un par de cosas como jugar con angle.
Algun consejo?
"We need more Quake1" - Theodore Roosevelt

DIVer

Amigos, no quisiera pecar de impaciente lloron, pero he visto que 12 seres humanos han pasado por el hilo y ni una sola orientación.
Se que este foro tiene muchos hilos y se hace lo que buenamente se puede, pero me da yuyu que este post termine igual que mi ultima duda (ya ven las visitas que tuvo y quien respondio... nobody).
Por favor, no tomen mis palabras en un sentido distinto a lo que es: peticion de ayuda. Destaco que el mayor avance del proyecto fue gracias a ustedes, con la inestimable ayuda que prestaron con la variable xgraph y el sistema de bloqueo de multi-teclas.
"We need more Quake1" - Theodore Roosevelt

FreeYourMind

pasame el proyecto por privado que te lo pruebo y modifico de la mejor manera para que quede bien

gecko

A ver. Creo que se necesitan un poco mas de detalles... tanto si queres una solucion especifica a tu codigo, como si queres algo mas general. Está bueno que comentes que tipo de juego es. que tenés hecho y que te falta. Cómo tenés hecho lo que tenes hecho, etc, etc. para darnos un contexto de lo que se puede o no hacer.

Yo voy a intentar responderte de forma muy general, y es solo una forma de ver las cosas. Puede haber mejores soluciones.

Supongo que el juego es un plataformas de vista lateral.

Los movimientos y todas las acciones de los personajes los podes dividir en estados. Por ejemplo podes tener estados "caminando derecha", "caminando izquierda", "reposo", y bueno todos los demas que sea necesario.

El codigo en general lo podrias estructurar de forma que en una parte se ejecuta la deteccion de estados, es decir comprobas que botones tenes apretados y todas las demas condiciones que puedan hacer que se esté en un estado u otro... y despues ahi es donde estableces en que estado esta el personaje.

Y despues, en otra parte del codigo, por separado, ejecutas el comportamiento de cada estado propiamente dicho. Por ejemplo mover x pixeles, mostrar x grafico, etc.

Lo que tendrias que hacer es agregar un estado nuevo, que sea de transicion. Por ejemplo "paso de izquierda a derecha", y "paso de derecha a izquierda".

Entonces en la deteccion de estados comprobas que si se cambio de direccion no se cambie directamente de "caminar izquierda" a "caminar derecha", sino que primero se pase por el estado de transicion correspondiente ("paso de izquierda a derecha"). Y una vez que ya se finalizo la transicion ahi si cambiar de estado.
Y despues en la parte de ejecucucion de estado lo que haces es reproducir la animacion de transicion hasta el final, y ahi es donde seteas un flag de que la transicion fue terminada. Recien despues de todo eso es que el personaje cambia al estado de "caminando derecha".


Bueno, creo que me enrede un poco mas de lo que me hubiese gustado con la explicacion. Si no entendes algo, o si no es nada de lo que necesitabas avisame  y lo intento otra vez :P

Saludos!
Torres Baldi Studio
http://torresbaldi.com

DIVer

#4
Muchas gracias por vuestras respuestas. Trato de concretar (yo tmbien tengo que tener cuidado de no liarme :P)
El juego pretende ser un homenaje a un clasico survival horror, cambiando aspecto como la vista isometrica (aunque la idea de cambiar a la vista original tipo point'n'click me llama a veces).
Tengo hecho:
-personaje del jugador. un sprite a partir de modelo 3d (generado con RE2ModelViewer). Animado con xgraph en 8 direcciones/angulos y una matriz para la animacion en si. La maquina de estado no esta implementada aun porque solo he hecho los sprites de caminar.

-mapa de prueba y placeholders para el sistema para cambio de habitaciones. Esto de momento funciona bien conectando 3 habitaciones. Mascaras implementadas pero a lo cerdete, baja el rendimiento.

-colision con paredes y obstaculos, modo guarrillo (mapgetpixel todo el rato y modificando x,y del jugador)
-cuadrado rojo(enemigo) que sigue al jugador evitando obstaculos. tambien se coloca a una distancia para atacar y cuando TRUE, pasa al case "atacar". Pero todavia no es mas que un placeholder y no he puesto que reste salud ni nada.
Tampoco persigue de cuarto a cuarto por momento, pero no creo que esto sea problematico.
Puedo mandar el codigo, pero tardare un poco en comentarlo mas, pasarlo a limpio vamos, y asegurarme que no les mando algun troyano de regalo.
EDIT: control WASD, tambien provisional aunque es mi preferencia.
"We need more Quake1" - Theodore Roosevelt

FreeYourMind

Como veas si afinal no lo consigues lo envias y te lo modificamos, no creo que no tener comentarios afecte algo a los que ya llevamos muchos años con bennu

DIVer

Pufff, tiene razon Freeyourmind, espero que no me tomen por presuntuoso. Los comentarios si eso son para aclarar alguna variable o proceso que declaro con p. ej. solo tres letras por comodidad al invocar.
No he podido contestar antes porque no para de llover en Gran Canaria y, aunque dicen que no esta probada la relacion, a mi se me chafa la conexion siempre.
Una vez mas, gracias por vuestras entregadas respuestas.

@Gecko, creo que te capto: actualmente ya tengo una variable privada que llamo "motion" e inicio en false para a continuacion ponerla en true cuando pulsas teclas wasd. Me dices que ponga en su lugar tantas variables como direcciones puedo tomar (caminar arriba, abajo, diagonales y asi hasta completar las 8) y decirle a bennu en un switch algo como "si pulsas <<d>> ve al case ANDAR -angle++ con la animacion de andar- pero si antes keyframe==0? ve al case GIRO - animacion de transicion, cambiar angulo-, y de este al de ANDAR. Lo piye bien?

El control es como Resident Evil, es decir, como un coche teledirigido; y tiene el mismo defecto que tenian los RE clasicos, que el personaje gira haciendo la animacion de andar y queda raro. Asi que a ver si me deshago de esto,
"We need more Quake1" - Theodore Roosevelt

gecko

Mmmmmm no, lo que te dije no fue una solucion pensada para este tipo de juegos. Lo que yo te decia era simplemente para reproducir una animacion cuando se cambiaba de direccion. (cuando se pasaba de caminar para adelante a caminar para atras, por ejemplo)

El tema del angle y el advance es que es algo que está pensado para una superficie plana, como para una vista TopDown (algo estilo GTA1, para darte un ejemplo), en ese caso puede funcionar muy bien el angle y el advance. Pero vos, si tenes una perspectiva como la del escenario de la imagen que mostraste tenes que tener en cuenta la profundidad tambien para calcular las posiciones. Esto es un poco mas complicado. Se me ocurre que tenes que pensar el movimiento como un vector en x,y y darle mas peso a la variable x, disminuyendo la influencia de y... pero no se, es algo que te estoy diciendo sin pensar mucho.

Lamento no tener una respuesta certera para darte.

Algo que no responde a tu duda, pero que tal ves te puede servir es la variable local xgraph: http://wiki.bennugd.org/index.php?title=Xgraph. Lo que hace es cambiar un grafico de acuerdo al angle de un proceso. Esto te puede servir para simplificar el cambio de graficos.
Torres Baldi Studio
http://torresbaldi.com

DIVer

Quote from: gecko on November 25, 2014, 01:32:02 AM
El tema del angle y el advance es que es algo que está pensado para una superficie plana, como para una vista TopDown (algo estilo GTA1, para darte un ejemplo), en ese caso puede funcionar muy bien el angle y el advance. ...
Algo que no responde a tu duda, pero que tal ves te puede servir es la variable local xgraph: http://wiki.bennugd.org/index.php?title=Xgraph. Lo que hace es cambiar un grafico de acuerdo al angle de un proceso. Esto te puede servir para simplificar el cambio de graficos.
Con xgraph trabajando estoy, Obi-wan.
Parafraseando a mi "querido" gobierno, tal vez he "programado por encima de mis posibilidades". Vamos, que me he dejado llevar/flipado un poco. Voy a dibujarme una maquina de estados en papel a ver si me aclaro un poco y suena la trompeta.
A ve como va esto :P, gracias de nuevo Gecko.
"We need more Quake1" - Theodore Roosevelt