Foros - Stratos

Proyectos => CRM32Pro => Mensaje iniciado por: Puyover en 05 de Marzo de 2007, 10:37:08 PM

Título: Problema con sprites.
Publicado por: Puyover en 05 de Marzo de 2007, 10:37:08 PM
Hola a todos!

veréis tengo esta función:

void PJHandler(void) {
// Realizamos un mapeado del teclado
   keyboard = SDL_GetKeyState(NULL);

// Comprobamos los movimientos de Link
   if(keyboard[SDLK_UP]) {
       Link->SelectAnim(SPRSTATE_UP);
       spr_posX = Link->GetPosX();
       spr_posY = Link->GetPosY() - spr_velY;
       Link->SetPosition(spr_posX, spr_posY);
   }
   if(keyboard[SDLK_LEFT]) {
       Link->SelectAnim(SPRSTATE_LEFT);
       spr_posX = Link->GetPosX() - spr_velX;
       spr_posY = Link->GetPosY();
       Link->SetPosition(spr_posX, spr_posY);
   }
   if(keyboard[SDLK_RIGHT]) {
       Link->SelectAnim(SPRSTATE_RIGHT);
       spr_posX = Link->GetPosX() + spr_velX;
       spr_posY = Link->GetPosY();
       Link->SetPosition(spr_posX, spr_posY);
   }
   if(keyboard[SDLK_DOWN]) {
       Link->SelectAnim(SPRSTATE_DOWN);
       spr_posX = Link->GetPosX();
       spr_posY = Link->GetPosY() + spr_velY;
       Link->SetPosition(spr_posX, spr_posY);
   }
}


Funcionar funciona bien. El problema es que no se hacer, para que cuando se deje de pulsar la tecla Arriba, la animación se pare, y se el muñeco se quede mirando hacia arriba.

Muchas gracias y saludos!!
Título: Problema con sprites.
Publicado por: Pogacha en 05 de Marzo de 2007, 11:39:13 PM
Tendras que hacer uso de la dinamica.
Guarda el estado del frame anterior en una variable o tomala desde algun lado.

   if(keyboard[SDLK_UP]) {
       Link->SelectAnim(SPRSTATE_UP);
       spr_posX = Link->GetPosX();
       spr_posY = Link->GetPosY() - spr_velY;
       Link->SetPosition(spr_posX, spr_posY);
   } else if(Link->GetAnim() == SPRSTATE_UP)
               Link->SelectAnim(SPRSTATE_LOOKING_UP);


Puedes seguir mejorandolo y enriquesiendolo.
Saludos!
Título: Problema con sprites.
Publicado por: Harko en 05 de Marzo de 2007, 11:39:50 PM
Tienes que usar la funcion Link->Pause(); para detener la animacion en el frame que quieras seleccionandolo con Link->SelectFrame(numero);

Precisamente estaba yo probando cosillas de estas con tiles y tal jeje.

Edit: Se me olvidaba, usa Resume(); si quieres volver a poner la animacion en marcha.

Harko.
Título: Problema con sprites.
Publicado por: Puyover en 05 de Marzo de 2007, 11:43:55 PM
Vale muchas gracias!

Voy a probar a ver que tal.

Salu2!!

EDITO: Ya me había dado cuenta de lo del resume jaja.
En fin, que así me funciona perfectamente. Muchas gracias a los dos!
Título: Problema con sprites.
Publicado por: TheAzazel en 06 de Marzo de 2007, 04:43:41 PM
Que bien que os ayudeis unos a otros porque yo tengo unos lios encima de narices! jeje

volvere pronto... e intentare pasarme lo mas regularmente posible por el foro.

Saludos!