SDL, Turorial :
Turorial SDL pour débutants, premiers pas :
Tout d'abord, ce post s'adresse à des programmeurs C++, non débutants : qui connaissent les classes, construction/destruction d'objets et bien évidemment débutent avec la SDL.
Nous allons voir comment créer une classe qui permet de créer un programme et sa fenêtre surtout.
Elle sera composée :
Citation :
Les attributs :
- SDL_Surface* screen
- SDL_Surface* fond
- D'autres champs si vous rajoutez des trucs :)
Les méthodes :
- Constructeur
- Destructeur
- redraw() qui sera une sorte "d'actualiser" pour la fenêtre
- d'autres si vous le souhaitez...
Bon et si on commençait ?
Alors pour toute classe, il est standard de faire un fichier .h dans laquelle on déclare la classe, ses attributs et ses méthodes, et un .cpp ou on implémente les méthodes.
Alors pour tout .h, grâce à 3 lignes de code, un fichier inclue dans plusieurs fichiers n'est l'inclue qu'une seule fois car à la compilation,tout est inclue dans le fichier ou se trouve main(), et une multi-inclusion renverrait des erreurs.
Voici comment on procède :
Code:
#ifndef _FICHIER_H_
#define _FICHIER_H_
//le code du fichier...
#endif
si _FICHIER_H_ n'est pas défini alors
on définit _FICHIER_H_
// code du fichier
fin du si
Voila la "traduction" .
Ça nous donne donc pour notre classe fenêtre :
Code:
#ifndef _FENETRE_H_
#define _FENETRE_H_
class Fenetre {
};
#endif
Bon étant donné que notre classe est un peu vide, on va la remplir.
Mettons-y la déclaration de nos attributs et méthodes...
Les attributs seront déclarés privés pour des raisons de sécurité.
ça devient alors :
Code:
#ifndef _FENETRE_H_
#define _FENETRE_H_
#include // nous avons besoin de la SDL...
class Fenetre {
private:
SDL_Surface* screen;
SDL_Surface* fond;
public:
Fenetre();
Fenetre(char* image_fond);
~Fenetre();
void redraw();
};
#endif
Voila, notre fichier fenetre.h est "terminé" ,car vous pourrez toujours
rajouter de nouvelles méthodes ou attributs.
Occupons nous de l'implémentation de nos méthodes .
On attaque donc le fichier fenetre.cpp .
Pour pouvoir définir ce qui se trouve dans fenetre.h, on inclut fenetre.h, puis pour définir une fonction, on fait :
Code:
type_renvoyé nom_de_la_classe::nom_de_la_fonction(arguments) {
// code de la fonction
}
Voici donc le fichier fenetre.cpp avec des définitions possibles pour nos méthodes, avec quelques commentaires:
Code:
#include "fenetre.h"
Fenetre::Fenetre(int largeur=800,int hauteur=600,int nb_couleurs=16,char* titre="Fenetre SDL")
{
if(SDL_Init(SDL_INIT_VIDEO)<0)
{
cerr<<"Erreur dans l'initialisation de la librairie" << endl;
}
screen=SDL_SetVideoMode(largeur,hauteur,nb_couleurs,SDL_HWSURFACE|SDL_DOUBLEBUF) ;
if(screen==NULL)
{
cerr<<"Erreur dans l'initialisation des modes vidéos:" << SDL_GetError();
SDL_Quit();
}
SDL_WM_SetCaption(titre,NULL);
SDL_Flip(screen);
}
Fenetre::Fenetre(int largeur=800,int hauteur=600,int nb_couleurs=16,char* titre="Fenetre SDL",char* background)
{
if(SDL_Init(SDL_INIT_VIDEO)<0)
{
cerr<<"Erreur dans l'initialisation de la librairie" << endl;
}
screen=SDL_SetVideoMode(largeur,hauteur,nb_couleurs,SDL_HWSURFACE|SDL_DOUBLEBUF) ;
if(screen==NULL)
{
cerr<<"Erreur dans l'initialisation des modes vidéos:" << SDL_GetError();
SDL_Quit();
}
SDL_WM_SetCaption(titre,NULL);
fond = SDL_LoadBMP(background);
SDL_BlitSurface(fond,NULL,screen,NULL);
SDL_Flip(screen);
}
Fenetre::~Fenetre() {
SDL_FreeSurface(fond);
SDL_FreeSurface(screen);
SDL_Quit();
}
void Fenetre::redraw() {
SDL_Flip(screen);
}
Voila, pour toute fonction SDL que vous n'avez pas comprise, veuillez aller faire un tour sur le site de la SDL, mais la pratique et la modification du code pourra vous aidez à mieux comprendre leur utilité.
Si c'est autre chose que vous n'avez pas compris, relisez un cours ou bien posez votre question.
Alp
|