| ||||||||||||
Ben oui, si on veut faire de l'affichage il faut bien faire une fenêtre. Je vous donne la syntaxe pour créer une fenêtre et on en discute après. Voici le fichier main.cpp :
C'est quoi EXIT_SUCCESS ? C'est une variable qui vaut 0, cela équivaut donc à return 0; sauf que si un jour on décide que la valeur retournée d'un programme qui fonctionne correctement n'est pas 0 mais 23723 ça foire (ça serait quand même très étonnant, mais c'est une habitude a prendre). Vous reconnaissez #include #include Toutes les fonctions de SDL (enfin presque toutes) commencent par SDL_ ,donc si vous taper man:SDL_ dans la barre d'adresse de konqueror vous aller trouver les principales fonctions de SDL (et les includes correspondants). Vous pouvez compiler ce programme avec g++ en faisant : g++ -Wall main.cpp -o fenetreSDL -lSDL Le -lSDL signifie que l'on va lier (linker) la bibliothèque SDL à notre programme, pour que g++ cherche les fonctions SDL où il faut. On en avait pas besoin précédemment car la librairie standard est liée par défaut. Et si vous voulez le compiler avec CMake écrivez ceci dans un fichier CMakeLists.txt :
Ensuite on se créé un dossier build : mkdir build On va dedans : cd build On appel CMake : cmake .. -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Looking for include files CMAKE_HAVE_PTHREAD_H -- Looking for include files CMAKE_HAVE_PTHREAD_H - found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Configuring done -- Generating done On appel make : make Scanning dependencies of target fenetreSDL [100%] Building CXX object CMakeFiles/fenetreSDL.dir/main.cpp.o Linking CXX executable fenetreSDL [100%] Built target fenetreSDL Puis on exécute le programme : ./fenetreSDL Heu, il ne s'est rien passé. J'ai déjà entendu ça. Bon, alors, il ne s'en pas rien passé c'est juste que c'est tellement rapide que vous n'avez rien vu. Nous avons créé une fenêtre et nous l'avons refermée aussitôt, mais il s'est passé plein de choses. Il faudrait que l'on fasse une fonction pause. Pour cela on utilise les événements de SDL (le SDL_Event). Ces événements contiennent tout ce qui peut arriver dans la fenêtre : clic de la souris déplacement de la souris, appui de touche, relâchement de touches, clic dans la croix en haut a gauche, molette, joistick (enfin si on lui demande). Pour la croix en haut de la fenêtre on peut faire ceci (fichier main.cpp) :
On recompile : make Scanning dependencies of target fenetreSDL [100%] Building CXX object CMakeFiles/fenetreSDL.dir/main.cpp.o Linking CXX executable fenetreSDL [100%] Built target fenetreSDL On exécute le programme : ./fenetreSDL Et voici le résultat : Voici un programme superbement inutile qui attend juste qu'on l'arrête, mais c'est un progrès. Pour mettre un titre dans la barre supérieur de la fenêtre il faut utiliser la fonction SDL_WM_SetCaption qui, comme vous pouvez vous en doutez donne un titre à la fenêtre. Il est très important d'écrire cette fonction après SDL_SetVideoMode , il faut en effet que la fenêtre existe si on veut lui mettre un titre.
Je vous met le programme complet pour que vous soyez sûre de ce que vous faites.
Compilez et vous verrez le titre de votre fenêtre. Quelque chose comme ça : Maintenant on va essayer d'afficher quelque chose, mais pour cela il faut créer un écran, enfin une SDL_surface* ecran pour faire de l'affichage. C'est en fait une image. Voici le fichier main.cpp :
C'est quoi un Uint32 ? Un Uint32 est un entier sur 32 bits (4 octets) c'est un type définit par SDL (par souci de compatibilité), ici on s'en sert pour stocker une couleur (RGB, ou RGBA) suivant que l'on utilise SDL_MapRGB ou SDL_MapRGBA. Ces deux fonctions construisent une couleur à partir de composantes rouge, verte et bleue (et transparente pour SDL_MapRGBA). Le premier paramètre étant le format de la surface (mais les surfaces connaissent leur format). La fonction SDL_FillRect(surface, NULL, color) rempli d'une couleur de type Uint32 la SDL_Surface* qu'on lui passe, le deuxième paramètre étant pour ne modifier qu'une partie de l'écran (voir doc). La fonction SDL_Flip(ecran) affiche à l'écran de l'ordinateur la SDL_Surface* ecran. On recompile : make Scanning dependencies of target fenetreSDL [100%] Building CXX object CMakeFiles/fenetreSDL.dir/main.cpp.o Linking CXX executable fenetreSDL [100%] Built target fenetreSDL On exécute le programme : ./fenetreSDL Et voici le résultat : Et voilà une superbe fenêtre blanche. Bon, enfin on a quand-même changé la couleur de fond de la fenêtre, c'est déjà pas mal. | ||||||||||||
|