RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Class pour gérer les fenêtres [SDL]

Forum : OPENGL
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ OPENGL

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM OPENGL

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Alp
Superviseur :
- Système d'ex.
- Méthodologie.
- C & C++
Modérateur :
- Bavardages
Chef de projet(s) :
- My SDL Lib

Avatar de Alp
Inscrit : 24/06/2004
Messages : 2571
Message
#49690
Posté le 28/01/05 à 20:47
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;
}

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); // 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
}

Fenetre::~Fenetre() {
SDL_FreeSurface(fond); // libérer les surface
SDL_FreeSurface(screen);
SDL_Quit(); // quitter
}

void Fenetre::redraw() {
SDL_Flip(screen); // réaffichage à l'écran.
}

[/code]

Voila, pour toute fonction SDL que vous n'avez pas comprise, veuillez aller faire un tour [url=http://www.libsdl.org]sur le site de la SDL[/url]

Si c'est autre chose que vous n'avez pas compris, relisez un cours ou bien posez votre question.

PS : ajouter le sujet à la FAQ ?


Alp
__________________________
Be C++
[url=http://blog.mestan.fr/]Mon Blog (C++, Intelligence Artificielle, Prolog)[/url]

ERREUR BBCODE SUR CE MESSAGE :
- La valeur de la balise "quote" n'est pas correcte !

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

Alp
Superviseur :
- Système d'ex.
- Méthodologie.
- C & C++
Modérateur :
- Bavardages
Chef de projet(s) :
- My SDL Lib

Avatar de Alp
Inscrit : 24/06/2004
Messages : 2571
Message
#49760
Posté le 29/01/05 à 12:51
Personne intéressé Smiley Smiley
dommage...
Alp
__________________________
Be C++
Mon Blog (C++, Intelligence Artificielle, Prolog)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Ishaan
Superviseur :
- Développemen.
Modérateur :
- PHP
- VB .NET
- MySQL
- Ajax
Chef de projet(s) :
- Webkomx
- Team MoteurProg

Avatar de Ishaan
Inscrit : 09/07/2004
Messages : 497
Message
#51498
Posté le 10/02/05 à 11:55
sisi c'est bien ;)

ça aurait juste mérité (à mon sens) que tu comment aussi 'DANS' le code pour expliquer ce que tu fais en détail ;)

je suis sûr que ça améliorerait encore plus ton tutoriel ;)
__________________________
....... Curtis: RTS 3D .......
Image Image

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Alp
Superviseur :
- Système d'ex.
- Méthodologie.
- C & C++
Modérateur :
- Bavardages
Chef de projet(s) :
- My SDL Lib

Avatar de Alp
Inscrit : 24/06/2004
Messages : 2571
Message
#51500
Posté le 10/02/05 à 11:58
Ok, je m'y atèle alors.
C'est parti pour les commentaires...Bouge pas :)
Alp
__________________________
Be C++
Mon Blog (C++, Intelligence Artificielle, Prolog)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Ishaan
Superviseur :
- Développemen.
Modérateur :
- PHP
- VB .NET
- MySQL
- Ajax
Chef de projet(s) :
- Webkomx
- Team MoteurProg

Avatar de Ishaan
Inscrit : 09/07/2004
Messages : 497
Message
#51504
Posté le 10/02/05 à 12:26
ok impeccable ;)
je pense que c'est beaucoup plus clair sur certains points ^^
__________________________
....... Curtis: RTS 3D .......
Image Image

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM OPENGL



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.