La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Une approche par « surface » Lécran ainsi que les images chargées sont considérées comme des surfaces. SDL_Surface: type contenant toutes les informations.

Présentations similaires


Présentation au sujet: "Une approche par « surface » Lécran ainsi que les images chargées sont considérées comme des surfaces. SDL_Surface: type contenant toutes les informations."— Transcription de la présentation:

1

2

3 Une approche par « surface » Lécran ainsi que les images chargées sont considérées comme des surfaces. SDL_Surface: type contenant toutes les informations sur une surface

4 Une approche par « surface » Initialisation dune surface: SDL_SetVideoMode(largeur,hauteur,BitsParPixel,type) BitsParPixel permet de spécifier la précision des couleurs (16->65536 couleurs) Type peut prendre les valeurs : SDL_HWSURFACE : Surface stockée dans la mémoire de la carte vidéo ->contraire : SDL_ SWSURFACE SDL_DOUBLEBUF : Active le double buffering (évite les scintillements) SDL_FULLSCREEN : Fenêtre en plein écran SDL_OPENGL : Permet de faire un lien avec OpenGL SDL_RESIZABLE : Un évènement SDL_VIDEORESIZE est envoyé si la taille change

5 Une approche par « surface » Initialisation dune surface: SDL_CreateRGBSurface (type,largeur,hauteur,BitsParPixel,R,V,B,A) Type peut ici prendre les valeurs : SDL_HWSURFACE : Surface stockée dans la mémoire de la carte vidéo ->contraire : SDL_ SWSURFACE SDL_SRCCOLORKEY : permet de rendre une couleur transparente SDL_SRCALPHA : permet dutiliser le canal alpha (permet des effets de transparence) RVBA est le masque de couleur du fond (alpha étant la transparence : 0 opaque, FF invisible)

6 Une approche par « surface » Initialisation dune surface à partir dune image : SDL_LoadBMP(chemin) chemin est une chaîne de caractères indiquant le fichier à charger. Il est cependant plus simple dutiliser une librairie annexe : SDL_Image Cette librairie permet de charger des fichiers BMP, PNM, XPM, LBM, PCX, GIF, JPEG, PNG et TGA grâce à la fonction : IMG_Load(chemin) chemin est une chaîne de caractères indiquant le fichier à charger. SDL_Image se charge de trouver le type du fichier

7 Manipulation des surfaces Copie entre deux surfaces : SDL_BlitSurface(Surf1,rect1,Surf2,rect2) Surf1 est la surface dorigine. Rect1 est le rectangle de sélection, de type SDL_Rect&: x et y représentent les coordonnées en haut à gauche du rectangle x et y représentent les coordonnées en haut à gauche du rectangle h et w représentent la hauteur et la largeur du rectangle à sélectionner h et w représentent la hauteur et la largeur du rectangle à sélectionner Surf2 est la surface de destination. Rect2 est le rectangle de destination. Seul x et y sont pris en compte : la largeur sera celle spécifié avec Rect1. Si Rect1 est à NULL, toute limage est copiée Si Rect2 est à NULL, limage copiée se place en haut à gauche

8 Gestion des entrées sorties Récupérer les évènements claviers SDL_PollEvent(&evenement) Evenement est de type SDL_Event. SDL_Event est une structure rassemblant les évènements : 1. Clavier : SDL_GetKeyState permet de récupérer un tableau de 256 cases booléenne Cest une photo du clavier : si une touche est pressée, la case correspondante est à vrai constantes : SDLK_ESCAPE, SDLK_F1, SDLK_w … Il est par ailleurs possible dutiliser UNICODE grâce à : SDL_EnableUNICODE(int enable);

9 Gestion des entrées sorties Récupérer les évènements claviers SDL_PollEvent(&evenement) Evenement est de type SDL_Event. SDL_Event est une structure rassemblant les évènements : 1.Clavier. 2. Souris : SDL_GetMouseState(x,y) permet davoir la position de la souris SDL_BUTTON(x) permet de savoir si le bouton x est appuyé. 3. Joystick : SDL_JoystickOpen(0) permet dinitialiser le joystick 0. SDL_JoystickClose(0) libère le joystick 0.

10 Gestion du son SDL permet de gérer le son, mais de manière peu évolué. Après quelques recherches sur Internet, la librairie FMOD mest apparu comme très performante. Elle permet dutiliser des effets DirectX, du son 3D, denregistrer en FULL-DUPLEX… De plus, elle permet de lire des fichiers de type : Midi, wav, mp3, ogg, raw, cd …

11 Gestion du son : FMOD Initialisation de FMOD : FSOUND_Init(freq,nbcanaux,flags) Freq représente la fréquence déchantillonnage (44100 par ex) Nbcanaux représente le nombres de canaux (ie le nombre de sons Max pouvant être joué simultanément) Flags représente les différents paramètres dinitialisation…

12 Gestion du son : FMOD Chargement dune musique : FSOUND_Stream_Open(chemin,flags,début,longueur) chemin est une chaîne de caractères indiquant le fichier à charger. flags a en général pour valeur FSOUND_LOOP début est facultatif, indique loffset de debut du fichier longueur est facultatif, indique la longueur du fichier

13 Gestion du son : FMOD Chargement dun son : FSOUND_Sample_Load(index,chemin,flags,début,longueur) Index défini le canal a utiliser ( FSOUND_FREE permet de laisser FMOD sen charger). chemin est une chaîne de caractères indiquant le fichier à charger. flags a en général pour valeur FSOUND_NORMAL début est facultatif, indique loffset de début du fichier longueur est facultatif, indique la longueur du fichier

14 Gestion du son : FMOD Jouer un son : FSOUND_PlaySound(index,identifiant) Index défini le canal a utiliser ( FSOUND_FREE permet de laisser FMOD sen charger). Identifiant est lid du son précédemment chargé avec FSOUND_Sample_Load

15

16

17 Initialisation de tous les composants. SDL : SDL_Init( SDL_INIT_VIDEO|SDL_INIT_TIMER ) Pour démarrer SDL. Le timer permettra de régler la vitesse daffichage, comme nous verrons par la suite. atexit(SDL_Quit) Permet de dire à SDL de quitter proprement. SDL_EnableUNICODE(1) parle de lui même. SDL_ShowCursor(false) rend la souris invisible. SDL_SetVideoMode(800,600,32, SDL_HWSURFACE| SDL_DOUBLEBUF|SDL_FULLSCREEN) Crée une fenêtre plein écran de 800*600*32, en mémoire vidéo, double buffer.

18 Initialisation de tous les composants. FMOD : FSOUND_Init(44100,4,0) Pour initialiser la fréquence déchantillonnage à 44100 échantillons/sec, avec 4 canaux indépendants et sans gestion particulière (3D, directX…)

19 Initialisation de tous les composants. Objets du jeu : Par exemple bombe (mais valable pour tous les autres objets : mur, joueurs, feu…) Pour des raisons doptimisation, il est préférable de charger les textures (ou image) une fois pour toute. Donc, les textures sont des membres static des classes.

20 Initialisation de tous les composants. BOMBE : Bombe::init() Charge les animations de la bombe : SDL_SetColorKey(bombe[0],SDL_SRCCOLORKEY|SDL_RLEACCEL,noir) Permet de spécifier une couleur transparente. SDL_RLEACCEL permet daccélérer le rendu des image transparentes noir est obtenu grâce a la fonction SDL_MapRGB(attend[0]->format,0,0,0) qui renvoie la couleur associé aux trois derniers paramètres.

21 Initialisation de tous les composants. Le plateau : Il est composé dun tableau à 2 dimensions : Ce sont des pointeurs sur des objets : VideVideVide FeuMurVide 1,11,21,3 2,12,22,3

22 Initialisation de tous les composants. Le plateau : Par ailleurs, un autre tableau recense toutes les modifications du plateau (une bombe de posée, un mur qui explose…) A départ, toutes les cases sont misent à 1 (modification), pour que tout le plateau soit affiché.

23 Boucle daffichage 1. On efface les joueurs. En effet, lorsquun joueur se déplace, il faut leffacer en réaffichant le décor qui se trouve sous le joueur.Sinon, une traînée apparaît:

24 Boucle daffichage 2. On affiche les explosions : 1. On parcours le tableau des modifications, et si une cases est à 2 alors cest quelle explose. 2. On interroge lobjet pour savoir où et comment les flammes partent. 3. Teste les collisions avec les objets du plateau et ainsi détermine quels objets sont détruits par lexplosion. 4. Affiche les flammes de lexplosion.

25 Boucle daffichage 3. On affiche les objets du plateau qui ont étés modifiés : 1. Parcours le tableau de modifs Lobjet na pas été modifié, on ne laffiche pas.Lobjet na pas été modifié, on ne laffiche pas. Lobjet explose, on affiche son explosion.Lobjet explose, on affiche son explosion. Lobjet doit être réactualisé, on laffiche.Lobjet doit être réactualisé, on laffiche. 2. Gestion de la pseudo-3D :

26 Boucle daffichage 4. On affiche les joueurs : Le joueur est contrôlé pour un humain : Le joueur est contrôlé pour un humain : Calcul de la direction demandé Calcul de la direction demandé Collision : Collision : Modification de la direction en calculant le point de contact sur le carré de collision de lobjet et et en modifiant en conséquence le vecteur déplacement. affichage du joueur : affichage du joueur : Calcul de limage à afficher en fonction de la direction du vecteur déplacement ainsi que de son module (et de limage précédente) :

27 Boucle daffichage 4. On affiche les joueurs : Le joueur est contrôlé par lordinateur : Le joueur est contrôlé par lordinateur : Calcul du but (par ordre de priorités) Calcul du but (par ordre de priorités) Y a til un danger? Y a til un danger? Y a til un joueur relativement proche? Y a til un joueur relativement proche? Y a til un bonus relativement proche? Y a til un bonus relativement proche? Calcul du chemin (par ordre de calcul) Calcul du chemin (par ordre de calcul) Il y a un danger Il y a un danger Calcul du chemin le plus cour vers une case sure, sans se soucier de passer par des cases dangereuses Calcul du chemin le plus cour vers une case sure, sans se soucier de passer par des cases dangereuses Ne fait pas les autres calculs! Recherche le chemin le mois dangereux (sans passer a coté des bombes) Recherche le chemin le mois dangereux (sans passer a coté des bombes) Recherche du plus cour chemin. Recherche du plus cour chemin. Puis même schéma que précédemment : Puis même schéma que précédemment : Calcul des collisions et gestion de la pseudo 3D Calcul des collisions et gestion de la pseudo 3D

28 Boucle daffichage 5. Calcul de la vitesse dexécution Si le temps passé a réactualiser la scène est supérieur à 30 ms, on attend le temps restant. Sinon, on redessine une nouvelle scène. Rendu possible grâce à SDL_INIT_TIMER et à la fonction SDL_GetTicks() qui renvoie le nombre de ms passées depuis le lancement de SDL.

29 La principale limite : lage. En effet, cette bibliothèque développé il y a fort longtemps est en réalité basé sur DirectX5 (pour Windows), ce qui implique quelques limitations. En effet, de nombreuse fonction (comme la transparence) sont gérées en software, sans tenir compte doptimisations matérielles…

30 La seconde limite : Pas de manipulation avancé. La bibliothèque ninclus pas de primitives évolué, comme zoomer sur une partie dimage, ou faire faire une rotation à une image.

31 La bibliothèque nautomatise pas lutilisation de plusieurs surfaces sur une même surface. Cest à dire que cest au programmeur denregistrer ce qui se trouve sous la surface pour pouvoir effacer lobjet par la suite : masque

32 De très bon tutoriaux se trouvent sur le site http://www.programmationworld.com/site/


Télécharger ppt "Une approche par « surface » Lécran ainsi que les images chargées sont considérées comme des surfaces. SDL_Surface: type contenant toutes les informations."

Présentations similaires


Annonces Google