| Projets |
349 Visiteurs 3168 Projets
|
|
 |
 |
 |
 |
|
|
| 2005 - Pérennisation |
Creation d'un moteur de jeu base sur les tiles
[40 mn de lecture - paru le 5/17/2005 5:39:48 PM - Public : Confirmé]
|
   
|
Auteur
1 La librairie SDL
1.1 IntroductionLa librairie SDL pour
Single DirectMedia Layer est une libraire graphique performante,
multi-plateformes sachant tirer parti des capacités du matériel et des
facilites offertes par le système d'exploitation.
Sous Linux, elle est capable de s'exécuter indifféremment sous X ou
dans le framebuffer. Sous Windows, elle sait tirer parti de l'API
native DirectX.
Nous ne nous attarderons pas sur son installation ou sa compilation, et
vous renvoyons à sa documentation pour de plus amples informations.
1.2 Initialisation
Avant d'espérer voir quoi que ce soit s'afficher à l'écran, il faut
impérativement initialiser la librairie et régler certains paramètres
comme la résolution, l'emplacement mémoire de l'espace de travail ou
bien le double-buffering.
Notre programme commence donc comme ceci :
/*-----------------------------------sample.c----------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
SDL_Surface *screen ;
int main( int argc, char **argv )
{
if( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
printf("Couldn't initialize SDL: %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(800,
600,
24,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen ) { printf("Unable to set 800x600x24 video mode:
%s\n", SDL_GetError()); exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS)
}
Rien de transcendantal jusqu'ici, on inclut les entêtes standards,
ainsi que celui de la librairie puis nous déclarons une variable
globale de type SDL_Surface destinée à contenir l'adresse de l'écran.
Que les puristes se rassurent, ce sera la seule !
En effet, lorsque l'on utilise la librairie SDL, toutes les opérations
graphiques se font sur des surfaces de dessin, de type SDL_Surface.
Tout est surface : même l'écran n'est qu'une surface !
Ensuite de procédons a l'initialisation de la partie graphique de la
librairie grâce à la fonction SDL_Init( nous n'utiliserons pas la
partie audio, ni le cdrom )
Enfin, nous réglons les paramètres vidéos a l'aide de la fonction SDL_SetVideoMode: 800x600 avec des couleurs sur 24 bits.
Le dernier paramètre de cette fonction nécessite toutefois quelques
explications : comme vous l'avez remarqué, il s'agit d'un champ de bits
combinant divers parametres
grâce au « pipe » OR.
SDL_HWSURFACE force la libraire à stocker les surfaces dans la mémoire
vidéo plutôt que dans la mémoire centrale du système : en plus d'etre
plus performant, cela nous permet d'utiliser le double-buffering.
SDL_DOUBLEBUF indique justement à notre libraire d'utiliser le
double-buffering, ce qui améliore l'aspect graphique de notre
application.
Le principe du double-buffering est de ne montrer le rendu qu'une fois que celui-ci est achevé.
L'exemple généralement utilisé pour illustrer ce principe est celui du peintre :
Si le peintre n'a qu'une seule toile et dessine au fur et à mesure,
vous le voyez en train de dessiner, ce qui peut être gênant lors d'une
animation par exemple...
Par contre, s'il dispose de deux toiles, il peut mettre la première
image de l'animation sur son chevalet, se cacher pour dessiner l'image
suivante sur sa deuxième toile puis une fois celle-ci terminée, échanger rapidement les deux toiles, ainsi de suite.
Résultat, c'est le cas de le dire, vous ne voyez plus que le résultat !
Et adieu le scintillement désagréable.
Cerise sur le gâteau, SDL gère le double-buffering de manière
totalement transparente ! Nul besoin de déclarer deux surfaces puis de
les échanger, dessinez simplement sur l'écran, et une fois terminé, il
suffit d'appeler SDL_Flip() et le tour est joué.
Une fois notre mode graphique correctement initialisé, SDL_SetVideoMode
nous renvoie un pointeur sur une SDL_Surface correspondant à l'écran
que nous attribuons immédiatement a notre variable globale screen.
Ainsi dans n'importe quelle fonction, pour accéder à l'écran il suffira de faire référence à screen.
Bien entendu, si l'initialisation échoue, l'exécution sera interrompue
et l'utilisateur recevra un message d'erreur lui indiquant la cause
exacte grâce à la fonction SDL_GetError() qui retourne une chaîne
de caractères contenant la dernière erreur s'étant produite.
Enfin, atexit(SDL_Quit) permet de toujours quitter le programme
proprement, en « quittant » d'abord la libraire, en cela que cette ligne
attache l'exécution de SDL_Quit à celle de la fonction exit(). Ainsi, si
exit() est appelé, SDL_Quit sera exécutée juste avant. Inutile à présent
de se soucier de mettre fin à l'exécution de la librairie, il suffit
pour cela de mettre fin à l'exécution du programme grâce à un exit()
régulier.
Ce début de programme ne fait pas grand chose mais reussit ou échoue !
Pour le compiler, la commande est la suivante :
gcc sample.c -o sample `sdl-config -libs --cflags`
Faites bien attention au sens des apostrophes ! Il s'agit de
backquotes, obtenues par la combinaison alt-gr + 7 sur un clavier
Azerty et non d'apostrophes classiques.
|
|
|
 |
 |
 |
 |
| Articles de la même catégorie |
|
|
|
 |
 |
 |
 |
| SUPINFO Training Center peut vous proposer une formation ... |
|
|
|
 |
 |
 |
 |
|