Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

SDL Einführung (Simple Grafik)

von MitgliedpsygateSeite 1 von 1

Einführung

SDL ist eine Library die recht einfach und schnell zu erlernen ist. SDL steht für Simple DirectMedia Layer. SDL verwaltet für einen Eingabegeräte (Maus, Tastatur), Grafik und Sound. Damit nimmt sie dem Programmierer einiges an Arbeit ab. SDL ist Event-Driven und deshalb recht einfach zu handhaben. Unter anderem wurde die Library geschrieben, um gerade Anfängern den Einstieg leicht zu machen. Gerade wenn man anfangs auch mit Hardwarebeschleunigung arbeiten will, eigent sich SDL sehr, um so etwas zu realisieren. Genug geredet. Ab ins Vergnügen!

Freebasic & SDL

SDL stellt einem alles was man braucht zur Verfügung. Freebasic sagt man, dass es SDL verwenden soll, indem man einfach

#include "SDL\SDL.bi"

an den Anfang seines Codes setzt. Als nächstes initialisiert man einen Screenpointer. Dieser zeigt später auf den Speicherbereich, in dem unsere "Grafik" liegt. Mit

dim video as SDL_Surface ptr

ist das gleich erledigt. Weil SDL alles verwaltet, brauchen wir noch einen sogenannten "Event", um Tastaturanschläge abfangen zu können.

dim event as SDL_EVENT

. Jetzt muss SDL nur noch den Grafikspeicher für uns reservieren und schon haben wir unser Fenster.

So, einmal alles im ganzen Stück zusammengefasst:

#include "SDL\SDL.bi"                   'SDL inkludieren.
#define xmax 640                        'Fensterweite
#define ymax 480                        'Fensterhöhe

dim shared video as SDL_Surface PTR     'Pointer auf den späteren Fensterpuffer.
dim shared event as SDL_Event           'Event zum Abfangen von Tastenanschlägen.

'Einmal ein Fenster der größe 640x480 mit 32bit Farbtiefe
'SDL_HWSURFACE = Im Grafikspeicher (Grafikkarte / Reservierter RAM in manchen Laptops)
'SDL_DOUBLEBUF = Mit 2 Pages, damit das Zeichnen nicht so hässlich aussieht
'SDL HWACCELL =  Und Hardwarebeschleunigt
video = SDL_SetVideoMode(xmax,ymax,32, SDL_HWSURFACE or SDL_DOUBLEBUF or SDL_HWACCEL)
'Unter Freebasic entspräche das ungefähr screenres 640,480,32,2
'SDL_HWACCEL und SDL_HWSURFACE haben keine wirkliche Entsprechung.

while 1
    SDL_PollEvent(@event)       'Falls ein Event geschehen ist (Taste gedrückt?) bitte in event speichern.
    select case event.type      'Event ist ein zusammengesetzter Datentyp und hat von SDL aus schon einen Typen (Maus, Tastatur usw)
    case SDL_KEYDOWN:           'Falls eine Taste gedrückt wurde, Programm beenden.
            SDL_QUIT()          'SDL beenden und Fenster schließen.
            end
    end select
    'Hier könnte jetzt der Code für Grafik usw. stehen
wend

Und schon haben wir ein einfaches Fenster aufgerufen und können eigentlich loslegen. Zum Beispiel ein Sprite laden und anzeigen. Dazu müssen wir wieder mit

dim sprite as SDL_SURFACE ptr

einen Pointer auf unseren späteren Speicherplatz erzeugen und dann können wir direkt mit der SDL Funktion IMG_LOAD(file) eine Bilddatei laden.

sprite = IMG_LOAD("avatar.png")

und schon haben wir unseren Avatar geladen.
Der folgende Code läd ein avatar.png und zeigt es dann, wartet auf eine Tastatureingabe und beendet dann:

#include "SDL\SDL.bi"                   'SDL inkludieren.
#define xmax 640                        'Fensterweite
#define ymax 480                        'Fensterhöhe

dim shared video as SDL_Surface PTR     'Pointer auf den späteren Fensterpuffer.
dim shared event as SDL_Event           'Event zum Abfangen von Tastenanschlägen.

'Einmal ein Fenster der größe 640x480 mit 32bit Farbtiefe
'SDL_HWSURFACE = Im Grafikspeicher (Grafikkarte / Reservierter RAM in manchen Laptops)
'SDL_DOUBLEBUF = Mit 2 Pages, damit das Zeichnen nicht so hässlich aussieht
'SDL HWACCELL =  Und Hardwarebeschleunigt
video = SDL_SetVideoMode(xmax,ymax,32, SDL_HWSURFACE or SDL_DOUBLEBUF or SDL_HWACCEL)
'Unter Freebasic entspräche das ungefähr screenres 640,480,32,2
'SDL_HWACCEL und SDL_HWSURFACE haben keine wirkliche Entsprechung.

''Ein Bild wie einen Avatar könnte man nun einfach mit
'IMG_Load laden.
''Code dafür wäre:
dim avatar as SDL_SURFACE ptr
avatar = IMG_load("avatar.png")
''Gezeichnet kann das Ganze dann mit SDL_BlitSurface(start,startkoordinaten,Ziel, Zielkoordinaten) werden.
SDL_BlitSurface(avatar,NULL,video,NULL)
''Und angezeigt wird das Ganze letzendlich mit
SDL_Flip(video)
''und wenn man das Bild nicht mehr braucht, einfach mit
SDL_FreeSurface(avatar)
''den Speicher freigeben.

while 1
    SDL_PollEvent(@event)       'Falls ein Event geschehen ist (Taste gedrückt?) bitte in event speichern.
    select case event.type      'Event ist ein zusammengesetzter Datentyp und hat von SDL aus schon einen Typen (Maus, Tastatur usw)
    case SDL_KEYDOWN:           'Falls eine Taste gedrückt wurde, Programm beenden.
            SDL_QUIT()          'SDL beenden und Fenster schließen.
            end
    end select
wend

So, das wars auch schon wieder mit den Grundlagen.

 

Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 05.04.2010 von Mitgliedpsygate angelegt.
  • Die aktuellste Version wurde am 05.04.2010 von Mitgliedpsygate gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen