Mittwoch, 10 Feb, 2010
Lektion 7
In dieser Lektion wollen wir nichts ueber SDL lernen vielmehr raemen wir unser bissheriges Programm ein wenig auf um den Ueberblick nicht zu verlieren.
Hier werde ich nicht viel schreiben sondern den Code sprechen lassen, da sich zur Lektion 6 nichts ändert außer das ich einige Sachen in einer Funktion zusammen gefasst habe, um das ganze etwas übersichtlicher zu gestalten.
Code:
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL/SDL_ttf.h"
#include <string>
//Oberflächen deklarieren
SDL_Surface* fenster = NULL;
SDL_Surface* hintergrund = NULL;
SDL_Surface* raumschiff = NULL;
SDL_Surface *text = NULL;
//Entält die Postitionsdaten der einzelnen Bildteile
SDL_Rect bildteil[ 4 ];
//Schriftart-Varibable deklarieren
TTF_Font *schriftart = NULL;
//Variable für Textfarbe
SDL_Color textfarbe = { 128, 88, 77 };
void setze_bauteil_masse()
{
//Raumschiff oben links
bildteil[ 0 ].x = 0;
bildteil[ 0 ].y = 0;
bildteil[ 0 ].w = 110;
bildteil[ 0 ].h = 110;
//Raumschiff oben rechts
bildteil[ 1 ].x = 110;
bildteil[ 1 ].y = 0;
bildteil[ 1 ].w = 110;
bildteil[ 1 ].h = 110;
//Raumschiff unten links
bildteil[ 2 ].x = 0;
bildteil[ 2 ].y = 110;
bildteil[ 2 ].w = 110;
bildteil[ 2 ].h = 110;
//Raumschiff unten rechts
bildteil[ 3 ].x = 110;
bildteil[ 3 ].y = 110;
bildteil[ 3 ].w = 110;
bildteil[ 3 ].h = 110;
}
SDL_Surface *lade_bild( std::string bildpfad )
{
//Nicht optimiertes Bild
SDL_Surface* normal_img = NULL;
//Optimiertes Bild
SDL_Surface* opt_img = NULL;
//Unoptimiertes Bild laden
normal_img = IMG_Load( bildpfad.c_str() );
//Optimiertes Bild erstellen
opt_img = SDL_DisplayFormat( normal_img );
//Unoptimiertes Bild freigeben
SDL_FreeSurface( normal_img );
//Farbschlüssel für die transparente Farbe im richigen Format erzeugen
Uint32 colorkey = SDL_MapRGB( opt_img->format, 0xFF, 0, 0xFF );
//Setze die Pixel der Farbe Rot 0, Grün 0xFF, Blau 0xFF auf Transparent
SDL_SetColorKey( opt_img, SDL_SRCCOLORKEY, colorkey );
return opt_img;
}
void blit_obj( int x, int y, SDL_Surface* quelle, SDL_Surface* ziel, SDL_Rect* bildteil = NULL )
{
//Erzeugt ein temporäres Rechteck zur Positionierung der Quelle
SDL_Rect offset;
//Übergibt die Position an das SDL-Rechteck
offset.x = x;
offset.y = y;
//Bild blitten
SDL_BlitSurface( quelle, bildteil, ziel, &offset );
}
void initalisierung()
{
//Initialisieren von SDL
SDL_Init( SDL_INIT_EVERYTHING );
//TTF Funktionalitäten initalisieren
TTF_Init();
//Fenstertext
SDL_WM_SetCaption( "Alles rund um TTF", NULL );
//Fenster Konfigurieren
fenster = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
}
void dateien_laden()
{
//Hintergrund laden
hintergrund = lade_bild( "hintergrund.png" );
//Raumschiff laden
raumschiff = lade_bild( "sprite.png" );
//Schriftart laden
schriftart = TTF_OpenFont( "helvetidoodlebyedt.ttf", 50 );
}
void aufraeumen()
{
//Bildspeicher freigeben
SDL_FreeSurface( hintergrund );
SDL_FreeSurface( raumschiff );
// Text freigeben
SDL_FreeSurface( text );
//Schriftart freigeben
TTF_CloseFont( schriftart );
//SDL_ttf beenden
TTF_Quit();
//SDL beenden
SDL_Quit();
}
void blitten()
{
//Hintergrund blitten
blit_obj( 0,0, hintergrund, fenster );
//Gerenderten Text blitten
blit_obj( 150,30, text, fenster );
// Raumschiffe blitten
blit_obj( 350,150, raumschiff, fenster, &bildteil[0] );
blit_obj( 250,250, raumschiff, fenster, &bildteil[1] );
blit_obj( 450,250, raumschiff, fenster, &bildteil[3] );
}
int main( int argc, char* args[] )
{
setze_bauteil_masse();
initalisierung();
dateien_laden();
//Text rendern
text = TTF_RenderText_Solid( schriftart, "Der Weltraum....", textfarbe );
blitten();
//Anzeige aktualisieren
SDL_Flip( fenster );
//Pause
SDL_Delay( 3000 );
aufraeumen();
return 0;
}