j'essaie d'avancer sur la prise en main de la SDL et voudrais travailler avec des sprites dans mon projet.
J'ai regardé dans le forum comment gérer les images en ressources externes (encapsulées dans un TNS externe).
J'ai donc pris un PNG que j'ai converti en TNS via le convertisseur du forum (avec option Nspire/Ndless).
Puis copié ce fichier TNS dans un répertoire adhoc sur ma nspire.
j'utilise alors le code suivant :
- Code: Select all
#include <os.h>
#include <SDL/SDL.h>
#include <SDL/SDL_gfxPrimitives.h>
#include <libndls.h>
#include <SDL/SDL_image.h>
SDL_Surface *screen;
SDL_Surface *sprite;
SDL_Rect position_sprite;
nSDL_Font *font;
SDL_bool done = SDL_FALSE;
#define SPRITE "1.0a"
Uint32 timerstart;
Uint32 timerend;
bool INFO_ON_SCREEN = SDL_TRUE;
void init_SDL(void)
{
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
printf("Sorry, can't init SDL: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
screen = SDL_SetVideoMode(320, 240, has_colors ? 16 : 8, SDL_SWSURFACE);
if(screen == NULL)
{
printf("Sorry, can't init display: %s\n", SDL_GetError());
SDL_Quit();
exit(EXIT_FAILURE);
}
SDL_ShowCursor(SDL_DISABLE);
font = nSDL_LoadFont(NSDL_FONT_TINYTYPE, 255, 255, 255);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
}
void quit(void)
{
SDL_Quit();
}
void handle_keydown(SDLKey key)
{
switch(key)
{
case SDLK_LCTRL:
break;
case SDLK_TAB:
break;
case SDLK_UP:
break;
case SDLK_DOWN:
break;
case SDLK_LEFT:
break;
case SDLK_RIGHT:
break;
case SDLK_8:
break;
case SDLK_9:
break;
case SDLK_5:
break;
case SDLK_6:
break;
case SDLK_ESCAPE:
done = SDL_TRUE;
break;
default:
break;
}
}
void load_Sprite( void )
{
Uint32 maCouleurTransparente = SDL_MapRGB(SDL_GetVideoSurface()->format, 0, 0, 0);
sprite = IMG_Load("/documents/ProgSly/shipsprite3.png.tns");
SDL_SetColorKey(sprite, SDL_SRCCOLORKEY, maCouleurTransparente);
}
void draw_Sprite( void )
{
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
nSDL_DrawString(screen, font, (int)(rand()%250), (int)(rand()%180), "Hello, world! \x1");
position_sprite.x = 10;
position_sprite.y = 10;
SDL_BlitSurface(sprite, NULL, screen, &position_sprite);
SDL_Flip(screen);
wait_key_pressed();
}
int main(void)
{
SDL_Event event;
init_SDL();
load_Sprite();
Uint32 timerstart = SDL_GetTicks();
draw_Sprite();
Uint32 timerend = SDL_GetTicks();
nSDL_DrawString( screen, font, 5, 5, "Dt= %d ms", timerend-timerstart );
SDL_Flip(screen);
while(!done)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
handle_keydown(event.key.keysym.sym);
break;
default:
break;
}
}
}
nSDL_FreeFont(font);
quit();
return EXIT_SUCCESS;
}
mais j'ai toujours un code erreur nSDL 1.1.1 : format de fichier non reconnu !!
Je sais pas d'où vient le problème. J'ai essayé en PNG, en BMP mais j'ai toujours un fichier sprite.png.tns qui n'est pas reconnu. Bref je bloque.
Quelqu'un pourrait il me venir en aide pour m'expliquer :
- si il faut bien convertir le fichier en TNS via le module de conversion du site (mViewer GX conversion)
- comment charger le sprite ensuite.
Merci beaucoup par avance.
Sly