Tout d'abord, ce post s'adresse à des programmeurs C++, non débutants : qui connaissent les class, construction/destruction d'objets et bien évidemment débutent avec la SDL.
Nous allons voir comment créér une class qui permet de créér un programme et sa fenêtre surtout.
Elle sera composée :
[quote]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...
[/quote]
Bon et si on commençait ?
Alors pour toute class, il est standard de faire un fichier .h dans laquelle on déclare la class, ses attributs et ses méthodes, et un .cpp ou on implémente les méthodes.
Alors pour tout .h, grace à 3 lignes de code, un fichier inclu dans plusieurs fichiersn'est l'inclu qu'une seule fois car à la compilation,tout est inclu 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[/code]
si _FICHIER_H_ n'est pas défini alors
on définit _FICHIER_H_
// code du fichier
fin du si
Voila la "traduction" .
Ca nous donne donc pour notre class fenetre :
[code]
#ifndef _FENETRE_H_
#define _FENETRE_H_
class Fenetre { // déclaration de notre class
};
#endif
[/code]
Bon étant donné que notre class 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é.
ca devient alors :
[code]
#ifndef _FENETRE_H_
#define _FENETRE_H_
#include <SDL.h> // nous avons besoin de la SDL...
class Fenetre {
private:
SDL_Surface* screen; // ces 2 attributs son private
SDL_Surface* fond; // pour la "sécurité"
public:
Fenetre(); // constructeur par défaut.
Fenetre(char* image_fond); // constructeur qui mettra une image de fond aussi
~Fenetre(); // destructeur
void redraw(); // redessiner : actualiser.
};
#endif
[/code]
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]
[u]type_renvoyé[/u] [b]nom_de_la_classe[/b]::[-i]nom_de_la_fonction[/i](arguments) {
// code de la fonction
}
[/code]
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") // arguments par défaut.
{
if(SDL_Init(SDL_INIT_VIDEO)<0)
{ // initialisation du mode vidéo de l'écran
cerr<<"Erreur dans l'initialisation de la librairie"<<endl;
}
screen=SDL_SetVideoMode(largeur,hauteur,nb_couleurs,SDL_HWSURFACE|SDL_DOUBLEBUF) ; // on donne largeur,hauteur,couleurs etc... à notre fenêtre
if(screen==NULL)
{
cerr<<"Erreur dans l'initialisation des modes vidéos:"<<SDL_GetError();
SDL_Quit();
} // tout cela, au cas ou mauvaise initialisation
SDL_WM_SetCaption(titre,NULL); // titre de la fenêtre
SDL_Flip(screen); // affichage à l'écran.
}
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;
}
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); // chargement de l'image dans la variable
SDL_BlitSurface(fond,NULL,screen,NULL); // collage de l'image sur l'écran
SDL_Flip(screen); // affichage de l'écran
}