SlideShare une entreprise Scribd logo
1  sur  76
Télécharger pour lire hors ligne
Cours de C n°15 (intermédiaire)
Trimestre 2
© 2018-2019, Mustapha Tachouct
Développement avec la bibliothèque SDL2
partie 2
Rappel
Initialiser SDL
Initialiser SDL :
int SDL_Init(int flags)
●
SDL_Init(...) permet d'initialiser SDL
●
retourne 0 si tout est ok
●
retourne une valeur négative si une erreur
Quelques exemples :
●
SDL_Init(SDL_INIT_VIDEO)
●
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)
●
SDL_Init(SDL_INIT_EVERYTHING)
=> retourne 0 si tout est ok
La fenêtre (window)
Créer une fenêtre
●
SDL_Window* SDL_CreateWindow(const char* titre,
int x,
int y,
int largeur,
int hauteur,
Uint32 flags)
●
titre : titre de la fenêtre
●
x, y : position de la fenêtre
●
largeur, hauteur : taille de la fenêtre
●
flags : les options qu'on veut utiliser
Détruire une fenêtre
●
void SDL_DestroyWindow(SDL_Window*
window)
●
window → la fenêtre qu’on veut détruire
Afficher une fenêtre pendant 5
secondes (exemple)
Afficher une fenêtre pendant 5
secondes
Attendre une durée fixe
Attendre N millisecondes
void SDL_Delay(Uint32 ms)
- ms : durée en millisecondes
Attendre N millisecondes
(exemples)
Dessiner avec SDL
Position écran
Le point (0,0) est toujours en haut à gauche pour dessiner
Quelques fonctions graphiques - 1/2
●
créer le renderer : SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags)
●
détruire le renderer : void SDL_DestroyRenderer(SDL_Renderer* renderer)
●
changer la couleur de dessinage ou remplissage : SDL_SetRenderDrawColor(SDL_Renderer* renderer, int r, int g, int b, int a)
●
effacer tout : SDL_RenderClear(SDL_Renderer* renderer)
●
mettre à jour la fenêtre : SDL_RenderPresent(SDL_Renderer* renderer)
Quelques fonctions graphiques - 2/2
●
dessiner un point : SDL_RenderDrawPoint(SDL_Renderer* renderer, int x, int y)
●
dessiner N points : SDL_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int N)
●
dessiner une ligne : SDL_RenderDrawLineSDL_Renderer* renderer, int x1, int y1, int x2,int y2)
●
dessiner N lignes : SDL_RenderDrawLinesSDL_RenderDrawLines(SDL_Renderer* renderer, const
SDL_Point* points, int N)
●
dessiner un rectangle vide : SDL_RenderDrawRect(SDL_Renderer* renderer, const SDL_Rect* rect)
●
dessiner N rectangles vides : SDL_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect* rects, int
N)
●
dessiner un rectangle rempli : SDL_FillRect(SDL_Renderer* renderer, const SDL_Rect* rect)
●
dessiner N rectangles remplis : SDL_FillRects(SDL_Renderer* renderer, const SDL_Rect* rects, int N)
Afficher un arrière-plan bleu - 1/2
Afficher un arrière-plan bleu - 2/2
Afficher un arrière plan bleu
Charger une image et libérer une image
Charger + Convertir une image en
texture pour l’afficher
Afficher une image (texture)
Afficher une image - 1/3
(exemple complet)
Afficher une image - 2/3
(exemple complet)
Afficher une image - 3/3
(exemple complet)
Afficher une image (screenshot)
Les événements (events)
Qu'est-ce qu'un événement
(event) ?
●
Un événement est une action utilisateur ou de l'OS
●
Ils sont stockés dans une file/queue : liste qui
conserve l'ordre d'arrivé (FIFO : First In First Out =
1er arrivé 1er servi)
●
Quelques exemples d'évenement : Touche du
clavier préssée, Click de la souris,
redimensionnement de la fenêtre, ...
Quelques types d'événements en SDL :
●
SDL_QUIT : L'utilisateur veut fermer l'application SDL
●
SDL_KEYDOWN : Une touche du clavier est préssée
●
SDL_KEYUP : Une touche du clavier est relachée
●
SDL_MOUSEBUTTONDOWN : Un bouton de la souris est
préssé
●
SDL_MOUSEBUTTONUP : Un bouton de la souris est
relaché
Lire tous les événements
Gérer l'événement "Quitter"
Utiliser le clavier
Il faut gérer les événements de type SDL_KEYDOWN
(touche préssée) ou SDL_KEYUP (touche relachée)
Utiliser le clavier
Utiliser la souris
Il faut gérer les événements de type
SDL_MOUSEBUTTONDOWN (bouton de la souris préssé)
ou SDL_MOUSEBUTTONUP (bouton de la souris relaché)
Info supplémentaire : evenement.motion.x et
evenement.motion.y donne la position de la souris
Utiliser la souris (exemple)
La boucle principale ou la gameloop
La boucle principale ou la
gameloop en 4 étapes:
●
(1) Event - boucle pour lire/gérer tous les
évenements via SDL_PollEvent()
●
(2) Update - Faire nos calculs
●
(3) Draw - Afficher l' "écran" de la fenetre +
mettre à jour à la fin via SDL_RenderPresent()"
●
(4) Wait - Attendre une petite durée
Gérer un framerate constant
(version simplifiée)
●
Par exemple, pour synchroniser l'affichage de
l'application SDL avec un framerate fixe de 20
FPS (20 images par secondes), il suffit
d’attendre : 1 secondes / 20
1 secondes / 20 = 1000 millisecondes / 20 = 50 ms
●
Remarque : on considère que les autres étapes
prennent 0 millisecondes (pas toujours vrais)
La gameloop avec un framerate constant de
20 FPS (version simplifiée)
Gérer un framerate constant
(meilleur version)
●
Synchroniser l'affichage de l'application SDL
avec un framerate fixe de 20 FPS (20 images
par secondes)
●
Remarque : On veut que l'application tourne
toujours à 20 FPS quelque soit la durée des 3
autres étapes.
Gérer un framerate constant
(meilleur version)
Gérer une gameloop avec un framerate
indépendant (autre version)
●
Synchroniser l'affichage de l'application SDL
avec un framerate indépendant (N images par
secondes), c’est à dire quelque soit la vitesse
du programme
Gérer une gameloop avec un framerate
indépendant (autre version)
La transparence
La transparence
●
Objectif : on veut afficher une image bmp
contenant de la transparence
Exemple : sans transparence – 1/3
Exemple : sans transparence – 2/3
Exemple : sans transparence – 3/3
Exemple : sans transparence
Exemple : avec transparence
●
Juste après l’appel à SDL_LoadBMP(), il suffit
d’ajouter cette ligne de code pour choisir la
couleur rose comme couleur transparente :
SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(pingouin_image->format, 255, 0, 255));
●
Ou pour n’importe quelle couleur :
SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(pingouin_image->format, r, v, b));
Exemple : avec transparence – 1/3
Exemple : avec transparence – 2/3
Exemple : avec transparence – 3/3
Exemple : avec transparence
Créer une animation
Qu'est-ce qu'un sprite ? Qu'est-ce
qu'un tile (une tuile) ?
●
Un sprite et un tile (une tuile) sont tous les deux une
petite image.
●
Un sprite est souvent utilisé pour un personnange ou
un objet alors qu'un tile (une tuile) sert pour le décors.
●
« La différence entre les deux est qu'un sprite contient
de la transparence » (pas toujours vrai car on peut
aussi avoir plusieurs plans contenant des tiles avec
de la transparence dans le but de les superposer).
Créer une animation venant d'un
"sprite sheet"
Qu'est-ce qu'un "sprite sheet" ?
●
Une sprite est une (petite) image contenant un
personnage ou un objet.
●
Un sprite sheet est une image contenant
plusieurs sprites.
Créer une animation venant d'un
"sprite sheet"
Qu'est-ce qu'un "sprite sheet" ?
Un exemple de fichier contenant
une animation
Créer une animation en SDL
●
Pour créer une animation à partir d'un sprite
sheet, on va faire un "clipping" puis changer la
zone du clipping en fonction du temps T. On va
modifier le paramètre "srcrect" (source
rectangle) de la fonction SDL_RenderCopy(...).
Afficher une image sans clipping
Afficher une image avec clipping sur
le 1er
sprite
Afficher une image avec clipping sur
le 1er
sprite
Afficher une image avec clipping sur
le 3ième sprite (numéro 2 en C)
Afficher une image avec clipping sur
le 3ième sprite (numéro 2 en C)
Afficher une animation en fonction à
un instant T
Afficher une animation en fonction à
un instant T (le sprite est animé)
Les collisions 2d
La théorie des collisions
Les collisions
Exemple : La fonction TestCercleCercle
Les collisions
●
Nécessaire dans les jeux vidéos 2d ou 3d
●
Par exemple : dans un jeu de foot quand le
ballon tombe en touchant le sol, il rebondit car il
y a une collision avec la sol
●
Fonctions mathématiques qui retourne VRAI(1)
ou FAUX (0)
Exemple : la fonction TestPointCercle
Exemple : la fonction TestPointRectangle
Exemple : la fonction TestRectangleRectangle

Contenu connexe

Tendances

Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objetAmir Souissi
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...abdelghani04
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriMansouri Khalifa
 
Rapport de Projet professionnel personnel.pdf
Rapport de Projet professionnel personnel.pdfRapport de Projet professionnel personnel.pdf
Rapport de Projet professionnel personnel.pdfsahar dridi
 
Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2Faycel Chaoua
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Ordinateur+et+système+d'exploitation 1.pdf
Ordinateur+et+système+d'exploitation 1.pdfOrdinateur+et+système+d'exploitation 1.pdf
Ordinateur+et+système+d'exploitation 1.pdfs12ber
 
Fiche technique système d'exploitation
Fiche technique système d'exploitationFiche technique système d'exploitation
Fiche technique système d'exploitationYoussef Tanawiati
 
Système de détection d'intrusion (Intrusion Detection System)
Système de détection d'intrusion (Intrusion Detection System)Système de détection d'intrusion (Intrusion Detection System)
Système de détection d'intrusion (Intrusion Detection System)YousraChahinez
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à pythonMariem ZAOUALI
 
Algorithme de chiffrement RC4, A5/1 & A5/2
Algorithme de chiffrement RC4, A5/1 & A5/2Algorithme de chiffrement RC4, A5/1 & A5/2
Algorithme de chiffrement RC4, A5/1 & A5/2Max Benana
 
Projet de fin d étude (1)
Projet de fin d étude (1)Projet de fin d étude (1)
Projet de fin d étude (1)Sanaa Guissar
 

Tendances (20)

Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Système d'exploitation
Système d'exploitationSystème d'exploitation
Système d'exploitation
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objet
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
Pare feu
Pare feuPare feu
Pare feu
 
Formation Agile Scrum
Formation Agile ScrumFormation Agile Scrum
Formation Agile Scrum
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
 
Rapport de Projet professionnel personnel.pdf
Rapport de Projet professionnel personnel.pdfRapport de Projet professionnel personnel.pdf
Rapport de Projet professionnel personnel.pdf
 
Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Ordinateur+et+système+d'exploitation 1.pdf
Ordinateur+et+système+d'exploitation 1.pdfOrdinateur+et+système+d'exploitation 1.pdf
Ordinateur+et+système+d'exploitation 1.pdf
 
Fiche technique système d'exploitation
Fiche technique système d'exploitationFiche technique système d'exploitation
Fiche technique système d'exploitation
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 
Système de détection d'intrusion (Intrusion Detection System)
Système de détection d'intrusion (Intrusion Detection System)Système de détection d'intrusion (Intrusion Detection System)
Système de détection d'intrusion (Intrusion Detection System)
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Algorithme de chiffrement RC4, A5/1 & A5/2
Algorithme de chiffrement RC4, A5/1 & A5/2Algorithme de chiffrement RC4, A5/1 & A5/2
Algorithme de chiffrement RC4, A5/1 & A5/2
 
Projet de fin d étude (1)
Projet de fin d étude (1)Projet de fin d étude (1)
Projet de fin d étude (1)
 

Similaire à Cours SDL2 (partie 2)

Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)lincubateur_tls
 
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Achraf Frouja
 
Développement de jeux 2D avec HTML5
Développement de jeux 2D avec HTML5 Développement de jeux 2D avec HTML5
Développement de jeux 2D avec HTML5 Microsoft
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantAntho Cardinale
 
Golbal mapper et la 3 d
Golbal mapper et la 3 dGolbal mapper et la 3 d
Golbal mapper et la 3 dsami horchani
 
Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)Edouard Marquez
 
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FRXNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FRSonny Brabez
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxbpmana
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieLoic Yon
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab Hajer Dahech
 
Introduction à Qt QML
Introduction à Qt QMLIntroduction à Qt QML
Introduction à Qt QMLLionel Duboeuf
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dXavier MARIN
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielleECAM Brussels Engineering School
 
Exemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTExemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTFrédéric Menou
 

Similaire à Cours SDL2 (partie 2) (20)

Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
 
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
 
Développement de jeux 2D avec HTML5
Développement de jeux 2D avec HTML5 Développement de jeux 2D avec HTML5
Développement de jeux 2D avec HTML5
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutant
 
Golbal mapper et la 3 d
Golbal mapper et la 3 dGolbal mapper et la 3 d
Golbal mapper et la 3 d
 
Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)Les nouveautés d'Android 7.1 (Nougat)
Les nouveautés d'Android 7.1 (Nougat)
 
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FRXNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
 
GeneralitesGUI1.pdf
GeneralitesGUI1.pdfGeneralitesGUI1.pdf
GeneralitesGUI1.pdf
 
TP_1.pdf
TP_1.pdfTP_1.pdf
TP_1.pdf
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptx
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partie
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab
 
Introduction à Qt QML
Introduction à Qt QMLIntroduction à Qt QML
Introduction à Qt QML
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3d
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Exemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTExemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWT
 
Guide Unity 3D pdf
Guide Unity 3D pdfGuide Unity 3D pdf
Guide Unity 3D pdf
 
Atelier IDS SNORT
Atelier IDS SNORTAtelier IDS SNORT
Atelier IDS SNORT
 

Plus de Mustapha Tachouct

Installation de la bibliothèque SDL2 dans un projet Visual Studio
Installation de la bibliothèque SDL2 dans un projet Visual StudioInstallation de la bibliothèque SDL2 dans un projet Visual Studio
Installation de la bibliothèque SDL2 dans un projet Visual StudioMustapha Tachouct
 
Design patterns for beginners (2/2)
Design patterns for beginners (2/2)Design patterns for beginners (2/2)
Design patterns for beginners (2/2)Mustapha Tachouct
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 
Design patterns for beginners (1/ 2)
Design patterns for beginners (1/ 2)Design patterns for beginners (1/ 2)
Design patterns for beginners (1/ 2)Mustapha Tachouct
 

Plus de Mustapha Tachouct (6)

Installation de la bibliothèque SDL2 dans un projet Visual Studio
Installation de la bibliothèque SDL2 dans un projet Visual StudioInstallation de la bibliothèque SDL2 dans un projet Visual Studio
Installation de la bibliothèque SDL2 dans un projet Visual Studio
 
The Cerny Method
The Cerny Method The Cerny Method
The Cerny Method
 
God Of War : post mortem
God Of War : post mortemGod Of War : post mortem
God Of War : post mortem
 
Design patterns for beginners (2/2)
Design patterns for beginners (2/2)Design patterns for beginners (2/2)
Design patterns for beginners (2/2)
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 
Design patterns for beginners (1/ 2)
Design patterns for beginners (1/ 2)Design patterns for beginners (1/ 2)
Design patterns for beginners (1/ 2)
 

Cours SDL2 (partie 2)

  • 1. Cours de C n°15 (intermédiaire) Trimestre 2 © 2018-2019, Mustapha Tachouct
  • 2. Développement avec la bibliothèque SDL2 partie 2
  • 5. Initialiser SDL : int SDL_Init(int flags) ● SDL_Init(...) permet d'initialiser SDL ● retourne 0 si tout est ok ● retourne une valeur négative si une erreur
  • 8. Créer une fenêtre ● SDL_Window* SDL_CreateWindow(const char* titre, int x, int y, int largeur, int hauteur, Uint32 flags) ● titre : titre de la fenêtre ● x, y : position de la fenêtre ● largeur, hauteur : taille de la fenêtre ● flags : les options qu'on veut utiliser
  • 9. Détruire une fenêtre ● void SDL_DestroyWindow(SDL_Window* window) ● window → la fenêtre qu’on veut détruire
  • 10. Afficher une fenêtre pendant 5 secondes (exemple)
  • 11. Afficher une fenêtre pendant 5 secondes
  • 13. Attendre N millisecondes void SDL_Delay(Uint32 ms) - ms : durée en millisecondes
  • 16. Position écran Le point (0,0) est toujours en haut à gauche pour dessiner
  • 17. Quelques fonctions graphiques - 1/2 ● créer le renderer : SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags) ● détruire le renderer : void SDL_DestroyRenderer(SDL_Renderer* renderer) ● changer la couleur de dessinage ou remplissage : SDL_SetRenderDrawColor(SDL_Renderer* renderer, int r, int g, int b, int a) ● effacer tout : SDL_RenderClear(SDL_Renderer* renderer) ● mettre à jour la fenêtre : SDL_RenderPresent(SDL_Renderer* renderer)
  • 18. Quelques fonctions graphiques - 2/2 ● dessiner un point : SDL_RenderDrawPoint(SDL_Renderer* renderer, int x, int y) ● dessiner N points : SDL_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int N) ● dessiner une ligne : SDL_RenderDrawLineSDL_Renderer* renderer, int x1, int y1, int x2,int y2) ● dessiner N lignes : SDL_RenderDrawLinesSDL_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int N) ● dessiner un rectangle vide : SDL_RenderDrawRect(SDL_Renderer* renderer, const SDL_Rect* rect) ● dessiner N rectangles vides : SDL_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect* rects, int N) ● dessiner un rectangle rempli : SDL_FillRect(SDL_Renderer* renderer, const SDL_Rect* rect) ● dessiner N rectangles remplis : SDL_FillRects(SDL_Renderer* renderer, const SDL_Rect* rects, int N)
  • 21. Afficher un arrière plan bleu
  • 22. Charger une image et libérer une image
  • 23. Charger + Convertir une image en texture pour l’afficher
  • 24. Afficher une image (texture)
  • 25. Afficher une image - 1/3 (exemple complet)
  • 26. Afficher une image - 2/3 (exemple complet)
  • 27. Afficher une image - 3/3 (exemple complet)
  • 28. Afficher une image (screenshot)
  • 30. Qu'est-ce qu'un événement (event) ? ● Un événement est une action utilisateur ou de l'OS ● Ils sont stockés dans une file/queue : liste qui conserve l'ordre d'arrivé (FIFO : First In First Out = 1er arrivé 1er servi) ● Quelques exemples d'évenement : Touche du clavier préssée, Click de la souris, redimensionnement de la fenêtre, ...
  • 31. Quelques types d'événements en SDL : ● SDL_QUIT : L'utilisateur veut fermer l'application SDL ● SDL_KEYDOWN : Une touche du clavier est préssée ● SDL_KEYUP : Une touche du clavier est relachée ● SDL_MOUSEBUTTONDOWN : Un bouton de la souris est préssé ● SDL_MOUSEBUTTONUP : Un bouton de la souris est relaché
  • 32. Lire tous les événements
  • 34. Utiliser le clavier Il faut gérer les événements de type SDL_KEYDOWN (touche préssée) ou SDL_KEYUP (touche relachée)
  • 36. Utiliser la souris Il faut gérer les événements de type SDL_MOUSEBUTTONDOWN (bouton de la souris préssé) ou SDL_MOUSEBUTTONUP (bouton de la souris relaché) Info supplémentaire : evenement.motion.x et evenement.motion.y donne la position de la souris
  • 37. Utiliser la souris (exemple)
  • 38. La boucle principale ou la gameloop
  • 39. La boucle principale ou la gameloop en 4 étapes: ● (1) Event - boucle pour lire/gérer tous les évenements via SDL_PollEvent() ● (2) Update - Faire nos calculs ● (3) Draw - Afficher l' "écran" de la fenetre + mettre à jour à la fin via SDL_RenderPresent()" ● (4) Wait - Attendre une petite durée
  • 40. Gérer un framerate constant (version simplifiée) ● Par exemple, pour synchroniser l'affichage de l'application SDL avec un framerate fixe de 20 FPS (20 images par secondes), il suffit d’attendre : 1 secondes / 20 1 secondes / 20 = 1000 millisecondes / 20 = 50 ms ● Remarque : on considère que les autres étapes prennent 0 millisecondes (pas toujours vrais)
  • 41. La gameloop avec un framerate constant de 20 FPS (version simplifiée)
  • 42. Gérer un framerate constant (meilleur version) ● Synchroniser l'affichage de l'application SDL avec un framerate fixe de 20 FPS (20 images par secondes) ● Remarque : On veut que l'application tourne toujours à 20 FPS quelque soit la durée des 3 autres étapes.
  • 43. Gérer un framerate constant (meilleur version)
  • 44. Gérer une gameloop avec un framerate indépendant (autre version) ● Synchroniser l'affichage de l'application SDL avec un framerate indépendant (N images par secondes), c’est à dire quelque soit la vitesse du programme
  • 45. Gérer une gameloop avec un framerate indépendant (autre version)
  • 47. La transparence ● Objectif : on veut afficher une image bmp contenant de la transparence
  • 48. Exemple : sans transparence – 1/3
  • 49. Exemple : sans transparence – 2/3
  • 50. Exemple : sans transparence – 3/3
  • 51. Exemple : sans transparence
  • 52. Exemple : avec transparence ● Juste après l’appel à SDL_LoadBMP(), il suffit d’ajouter cette ligne de code pour choisir la couleur rose comme couleur transparente : SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(pingouin_image->format, 255, 0, 255)); ● Ou pour n’importe quelle couleur : SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(pingouin_image->format, r, v, b));
  • 53. Exemple : avec transparence – 1/3
  • 54. Exemple : avec transparence – 2/3
  • 55. Exemple : avec transparence – 3/3
  • 56. Exemple : avec transparence
  • 58. Qu'est-ce qu'un sprite ? Qu'est-ce qu'un tile (une tuile) ? ● Un sprite et un tile (une tuile) sont tous les deux une petite image. ● Un sprite est souvent utilisé pour un personnange ou un objet alors qu'un tile (une tuile) sert pour le décors. ● « La différence entre les deux est qu'un sprite contient de la transparence » (pas toujours vrai car on peut aussi avoir plusieurs plans contenant des tiles avec de la transparence dans le but de les superposer).
  • 59. Créer une animation venant d'un "sprite sheet" Qu'est-ce qu'un "sprite sheet" ? ● Une sprite est une (petite) image contenant un personnage ou un objet. ● Un sprite sheet est une image contenant plusieurs sprites.
  • 60. Créer une animation venant d'un "sprite sheet" Qu'est-ce qu'un "sprite sheet" ?
  • 61. Un exemple de fichier contenant une animation
  • 62. Créer une animation en SDL ● Pour créer une animation à partir d'un sprite sheet, on va faire un "clipping" puis changer la zone du clipping en fonction du temps T. On va modifier le paramètre "srcrect" (source rectangle) de la fonction SDL_RenderCopy(...).
  • 63. Afficher une image sans clipping
  • 64. Afficher une image avec clipping sur le 1er sprite
  • 65. Afficher une image avec clipping sur le 1er sprite
  • 66. Afficher une image avec clipping sur le 3ième sprite (numéro 2 en C)
  • 67. Afficher une image avec clipping sur le 3ième sprite (numéro 2 en C)
  • 68. Afficher une animation en fonction à un instant T
  • 69. Afficher une animation en fonction à un instant T (le sprite est animé)
  • 70. Les collisions 2d La théorie des collisions
  • 72. Exemple : La fonction TestCercleCercle
  • 73. Les collisions ● Nécessaire dans les jeux vidéos 2d ou 3d ● Par exemple : dans un jeu de foot quand le ballon tombe en touchant le sol, il rebondit car il y a une collision avec la sol ● Fonctions mathématiques qui retourne VRAI(1) ou FAUX (0)
  • 74. Exemple : la fonction TestPointCercle
  • 75. Exemple : la fonction TestPointRectangle
  • 76. Exemple : la fonction TestRectangleRectangle