Robiłem se takie cuś w SDLu ażeby zmieniał sprity w zależności od kierunku ;P Niestety pochrzaniłem coś w kodzie i program wyłącza się zaraz po włączeniu xd Kodzik:
#include<SDL.h>
int main ( int argc, char *argv[] )
{
SDL_Surface *screen, *temp, *spr_up, *spr_down, *spr_left, *spr_right, *back, *sprite;
SDL_Rect rcMan, rcBack;
SDL_Event event;
Uint8 *keyState;
int gameEnd, cWhite;
SDL_Init ( SDL_INIT_VIDEO );
screen = SDL_SetVideoMode ( 640, 480, 0, 0 );
temp = SDL_LoadBMP ( "man_up.bmp" );
spr_up = SDL_DisplayFormat ( temp );
SDL_FreeSurface ( temp );
temp = SDL_LoadBMP ( "man_down.bmp" );
spr_down = SDL_DisplayFormat ( temp );
SDL_FreeSurface ( temp );
temp = SDL_LoadBMP ( "man_left.bmp" );
spr_left = SDL_DisplayFormat ( temp );
SDL_FreeSurface ( temp );
temp = SDL_LoadBMP ( "man_right.bmp" );
spr_right = SDL_DisplayFormat ( temp );
SDL_FreeSurface ( temp );
cWhite = SDL_MapRGB ( screen -> format, 255, 255, 255 );
SDL_SetColorKey ( sprite, SDL_SRCCOLORKEY | SDL_RLEACCEL, cWhite );
temp = SDL_LoadBMP ( "tlo.bmp" );
back = SDL_DisplayFormat ( temp );
SDL_FreeSurface ( temp );
rcMan.x = 50;
rcMan.y = 50;
gameEnd = 0;
while ( gameEnd = 0 )
{
if ( SDL_PollEvent ( &event ) )
{
switch ( event.type )
{
case SDL_QUIT:
gameEnd = 1;
break;
case SDL_KEYDOWN:
switch ( event.key.keysym.sym )
{
case SDLK_ESCAPE:
case SDLK_q:
gameEnd = 1;
break;
}
break;
}
}
keyState = SDL_GetKeyState ( NULL );
if ( keyState [SDLK_LEFT] )
{
rcMan.x -= 1;
sprite = spr_left;
}
if ( keyState [SDLK_RIGHT] )
{
rcMan.x += 1;
sprite = spr_right;
}
if ( keyState [SDLK_UP] )
{
rcMan.y -= 1;
sprite = spr_up;
}
if ( keyState [SDLK_DOWN] )
{
rcMan.y += 1;
sprite = spr_down;
}
for (int x = 0; x < 640 / 64; x++)
{
for (int y = 0; y < 480 / 64; y++)
{
rcBack.x = x * 64;
rcBack.y = y * 64;
SDL_BlitSurface ( back, NULL, screen, &rcBack );
}
}
SDL_BlitSurface ( sprite, NULL, screen, &rcMan );
SDL_UpdateRect ( screen, 0, 0, 0, 0 );
}
SDL_FreeSurface ( back );
SDL_FreeSurface ( spr_up );
SDL_FreeSurface ( spr_down );
SDL_FreeSurface ( spr_left );
SDL_FreeSurface ( spr_right );
SDL_Quit ( );
return 0;
}
:E