Anuncios Google

Duda sobre sprites [Solucionado]

He estado empezando a programar un juego para la DS, y para lo poco que llevo, ya estoy muy con-ten-to^^

Pero hay un detalle que querria añadir para que quedara mejor, y es lo siguiente:

  • Supongamos que tengo un sprite de agacharse mirando hacia la derecha:

   if(Pad.Newpress.Down) {
      PA_StartSpriteAnim(0,0,22,22,8);
      PA_SetSpriteHflip(0,0,0);
}   

Como se puede ver, la animacion cambia si se pulsa Abajo en el Pad.

  • Y supongamos que tengo otro para usar un "martillo":

   if(Pad.Newpress.X) {
        PA_StartSpriteAnimEx(0, 0, 9, 21, 8, ANIM_UPDOWN, 1);
      PA_SetSpriteHflip(0,0,0);
}

¿Como podria hacer para que si el sprite mirase a la derecha, las animaciones que tengo puestas miraran hacia la derecha, y si el sprite mirase a la izquierda, las dos anim. mirasen a la izquierda?

En esas lineas de codigo, las animaciones miran a la derecha.

Y tambien que se pararan en ese estado, tanto de X como de Y, es decir, que no se movieran ni las animaciones ni los sprites pulsando otras teclas mientras se pulsan esas, como con Pad.Newpress.Right y todas esas por el estilo.

Se que son unas preguntas un poco tontas, pero lo intente lo que pude, y nada...

Gracias.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de best_guitar

hola Draco, campeon. Como

hola Draco, campeon. Como sabes todavia no he hecho servir las animaciones en zenit para las explosiones. Sin embargo, intentaré ayudarte. Primero, supongo que cuando pulsas abajo quieres hacer solo un cambio de sprite, por que veo que la animacion inicial y la final es la misma. Luego al pulsar X se mueve el martillo con una animacion oscilante. Una pregunta...  si no aplicas la PA_SetSpriteHflip ¿ hacia que lado miras? yo imagino que a la IZQUIERDA, ya me diras, en fin, creo que debes darle por programa diferentes estados al personaje. Una forma sencilla es con defines. Asi:

<code>

#define QUIETO -1

#define MIRANDOIZQUIERDA 0

#define MIRANDODERECHA 1

#define AGACHADOIZQUIERDA 2

#define AGACHADODERECHA 3

#define MARTILLEOIZQUIERDA 4

#define MARTILLEODERECHA 5

Yo suelo hacerlo con enumeraciones pero es lo mismo y algo más complicado.

Entonces,

int estadoPersonaje=QUIETO;

//control del mando

if(Pad.Held.Left){estadoPersonaje = MIRANDOIZQUIERDA;}

if(Pad.Held.Right){estadoPersonaje = MIRANDODERECHA;}

if(Pad.Held.Down){

if(estadoPersonaje %2 == 0)  //se divide entre 2 y si el resto es 0 (pares) esta mirando a la izquierda. Fijate los 'izquierda' son 0,2,4,...otras operaciones a la izquierda seran 6, 8, 10, etc...

   estadoPersonaje = AGACHADOIZQUIERDA;

else

   estadoPersonaje = AGACHADODERECHA;

}

if(Pad.Held.x){

if(estadoPersonaje %2 == 0)  //se divide entre 2 y si el resto es 0
(pares) esta mirando a la izquierda. Fijate los 'izquierda' son
0,2,4,...otras operaciones a la izquierda seran 6, 8, 10, etc...

   estadoPersonaje = MARTILLEOIZQUIERDA;

else

   estadoPersonaje = MARTILLEODERECHA;

}

 

//movimiento segun estado

switch(estadoPersonaje)

{

case MIRANDOIZQUIERDA:

//sprite o animacion mirando izquierda

break;

case MIRANDODERECHA:

//sprite o animacion mirando izquierda

PA_SetSpriteHflip(screen, obj, hflip);  lo giramos a la derecha.

break;

case AGACHADOIZQUIERDA:

//sprite o animacion correspondiente mirando izquierda

break;

case AGACHADODERECHA:

//sprite o animacion correspondiente mirando izquierda

PA_SetSpriteHflip(screen, obj, hflip);  lo giramos a la derecha.

break;

case MARTILLEOIZQUIERDA:

//sprite o animacion correspondiente mirando izquierda

break;

case MARTILLEODERECHA:

//sprite o animacion correspondiente mirando izquierda

PA_SetSpriteHflip(screen, obj, hflip);  lo giramos a la derecha.

break;

}

</code>

 

Ya te digo que no tengo usada todavia las animaciones, pero este te podria servir como esqueleto del juego, recuerda tambien que este codigo no está probado y puede darte problemas directamente, lo que pretendia es dar una idea...

Saludos!

Imagen de Draco el dragon

Gracias

Gracias, pero al final, debido a lo que tengo a parte de esas funciones en el main.c, lo de quitar el Hflip me funciono.

De todos modos, gracias, le sacare partido a esto ;)

Imagen de The Dark Master

Pues deja los PA_SpriteHflip

Pues deja los PA_SpriteHflip cuando pulses derecha o izquierda y quitalos de la X y abajo.

Salu2

Imagen de Draco el dragon

Vaya...

Y yo estrujandome el cerebro que si el if, el while, el else... Y solo tenia que quitar eso.

Mil gracias!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.