Grafik med SDL

Tillbaka till artikelarkivet

Filer

SDL-Del4.zip (11.46 kB)

Verktyg

Kommentarer (39)
Utskriftsvänligt format

Betyg

markedunmaked 5.9

SDL är ett bibliotek som gör det enkelt att använda grafik och annan media i dina program, i den här guiden visar jag hur du med hjälp utav SDL kan skapa enkla grafiska program i C++.

Navigation:

< Föregående del |

Text - 4 - Avancerad bildhantering

Avancerad bildhantering



I den här delen ska jag visa hur man kan använda lite mer avancerade bildfunktioner, närmare bestämt inladdning av filformat som JPG, GIF och PNG. Jag ska också visa hur man kan bygga en klass för att hantera animationer på ett mycket enkelt sätt.

Bra bildformat



SDL_Image är ett smidigt stödbibliotek till SDL som gör att man enkelt kan ladda in alla möjliga blidformat, bland annat JPG, GIF och PNG men även en del andra. För att komma igång med SDL_Image behöver man först gå in på http://www.libsdl.org/projects/SDL_image/ och ladda ner en fil.

Använder man Visual Studio är det SDL_image-devel-1.2.4-VC6.zip man ska ha. Packa upp filen på hårddisken och gå in i menyn Tools -> Options. Gå sedan till Projects -> VC++ Directories. Under Include files ska du lägga till en rad, den ska peka på underkatalogen include i mappen du nyss packade upp. Under Library files ska du lägga till en rad som pekar på underkatalogen lib som finns på samma ställe. När du är klar med detta ska du kopiera över alla .dll-filer från underkatalogen lib och lägga dem på det ställe i ditt projekt där .exe-filen hamnar. Där du lade SDL.dll

Använder du GCC ska du lägga till raden

-lSDL_image

Sist på raden där du anropar g++ i din Makefile.

I källkoden behöver du sedan lägga till två rader i början av filen. Såhar ska det se ut:
  1.  
  2. #ifdef WIN32
  3. #pragma comment(lib, "SDL.lib")
  4. #pragma comment(lib, "SDLmain.lib")
  5. #pragma comment(lib, "SDL_Image.lib")
  6. #endif
  7.  
  8. #include "SDL.h"
  9. #include "SDL_image.h"
  10. #include <iostream>
  11.  
  12. using namespace std;


Nu är det klart! Gå till funktionen DisplayImage och byt ut SDL_LoadBMP EUR mot:
  1.  
  2. image = IMG_Load(path);

Denna funktion klarar av att ladda alla bra filformat, testa med att spara din testbild som PNG och ange att programmet ska använda den istället. Filstorleken på PNG-bilder är ofta avsevärt mindre än BMP-bilder.

Animeringar



Nu när vi kan ladda in bilder med lite smidigare bildformat ska jag även visa hur man kan skapa en smidig klass för att hantera animeringar.

När man håller på med klasser är det ofta smidigt att varje klass i en separat fil, dessutom behöver man en headerfil för klassdeklarationen. När man gör detta kan det hända att en av dessa klassfiler blir kompilerad innan filen med huvudfunktionen, och det är i den filen alla våra include-direktiv står. Skulle en klassfil bli kompilerad innan main så är inga saker inkulderade, och då kommer det inte gå att kompilera. För att råda bot på detta skapar vi en fil som heter main.h som ser ut såhär:
  1.  
  2. #ifndef main_header
  3. #define main_header
  4.  
  5. #ifdef WIN32
  6. #pragma comment(lib, "SDL.lib")
  7. #pragma comment(lib, "SDLmain.lib")
  8. #pragma comment(lib, "SDL_Image.lib")
  9. #endif
  10.  
  11. #include "SDL.h"
  12. #include "SDL_image.h"
  13.  
  14. #include <iostream>
  15. #include <vector>
  16. #include <fstream>
  17.  
  18. #include "CAnimation.h"
  19.  
  20. using namespace std;
  21.  
  22. int DisplayImage(SDL_Surface* destination, const char* path, int x, int y);
  23.  
  24. #endif


Som du ser har jag klippt ut raderna från main.cpp samt lagt till lite nya rader. De nya include-raderna behövs för den nya klassen vi skapar.
Skapa nu en main.h i ditt projekt och ta sedan bort de översta raderna i main.cpp och byt ut dem mot:
  1.  
  2. #include "main.h"


Innan loopen i main.cpp ska du nu lägga till följande rader:
  1.  
  2. CAnimation image(screen);
  3. if (image.Init("Animation") != 0)
  4. {
  5. cout << "Could not load animation!" << endl;
  6. SDL_Quit();
  7. return 1;
  8. }


Och där det tidigare stod DisplayImage(EUR); ska du skriva:
  1.  
  2. image.Draw(imgX, imgY);


Nu ska du skapa en ny katalog i din projektmapp som heter Animation. I den lägger du en fil som heter index.ini. I den filen skriver du filnamnet på alla bilder som ska ingå i animationen, efter filnamnet skriver du ett mellanslag och sedan antalet millisekunder som den bilden ska visas. Sedan lägger du in filerna som ska ingå i animationen i den mappen också. Du kan nu använda PNG-bilder med genomskinlighet om du vill!

Klassen CAnimation kommer jag inte förklara här i guiden. Men du får en zip-fil med alla filerna och CAnimation-filerna är väl kommenterad så du bör kunna förstå vad som händer ändå. Det nya projektet ska innehålla fyra källkodsfiler, main.cpp, main.h, CAnimation.cpp, CAnimation.h samt en katalog med animationen i.
Zip-filen hittar du längst upp till höger i den lilla blå panelen.

Slut

Navigation:

< Föregående del |

Till toppen