IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Comprendre la programmation d'un jeu vidéo : la boucle de jeu vidéo


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut Comprendre la programmation d'un jeu vidéo : la boucle de jeu vidéo
    Bonjour à tous,

    J'ai remarqué que certains nouveaux programmeurs (nouveaux dans le domaine du jeu vidéo) ne comprenait pas toujours ce qu'est la boucle de jeu. Ainsi, j'ai voulu faire le point pour poser cette base de la programmation d'un jeu.

    Bonne lecture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre régulier
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Oman

    Informations professionnelles :
    Activité : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 118
    Points
    118
    Par défaut
    Salut,

    Excellent tutoriel, simple et très bien expliqué!

    Pour aller (un peu) plus loin : http://gameprogrammingpatterns.com/game-loop.html

  3. #3
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Ah ben du coup j'ai lu les deux. Ils sont très bien.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    Merci pour ce cours.
    J'étais resté à la programmation grand papy ou tout le monde possède la même machine, sans prendre en compte la disparité des configs.
    Du coup je viens de réaliser certaines choses

  5. #5
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 83
    Points : 198
    Points
    198
    Par défaut
    Merci pour cet article intéressant !

    Juste une remarque : dans les bout de pseudo code, dommage qu'il y ait du mélange français/anglais ("tempsDebut = time()" par exemple) et des fautes de français ("aCliquerSurLaCroixRouge()" qui doit se lire je pense "à cliqué sur la croix rouge").

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Merci pour l'article, c'est intéressant. Je m'étais essayé à XNA il y a quelques temps pour découvrir la programmation de jeux en tentant de faire un genre de candy crush et ça m'aurait bien aider d'avoir ça à l'époque.

    Sinon, j'ai relevé ceci :
    Si tout va bien, notre boucle de jeu s'exécute 60 fois par seconde. Donc la position en X de l'élément se sera déplacée de 60 * vitesse en une seconde. Cela est totalement convenable lorsque « tout va bien ». Mais si, pour une raison ou une autre, le programme ralentit, nous ne sommes plus sûrs de toujours avoir 60 images par seconde. Si on tombe à 30 images par seconde, en une seconde notre élément se sera déplacé de 30 * vitesse. Le déplacement aura été deux fois moins lent.
    Ce ne serait pas deux fois plus lent par hasard ? Ou alors il y a encore quelque chose qui échappe au novice que je suis.
    Kropernic

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je suis en train de m'intéresser au développement de jeux vidéo justement en ce moment, notamment à Unity étant développeur C#, et cet article m'a beaucoup plu, il est clair et complet à la fois.

    Petite question : y'en a-t-il d'autres de prévu du même style, sur des points précis de développement de jeux ?

    Merci en tout cas.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Merci à tous pour vos retours !

    Citation Envoyé par Guildem Voir le message
    Juste une remarque : dans les bout de pseudo code, dommage qu'il y ait du mélange français/anglais ("tempsDebut = time()" par exemple) et des fautes de français ("aCliquerSurLaCroixRouge()" qui doit se lire je pense "à cliqué sur la croix rouge").
    C'est corrigé. Par contre, pour la fonction time() (et delay()), je les laisse en anglais car ce sont des fonctions provenant des bibliothèques que l'on utile. Les fonctions en français sont celles que l'on doit surement faire nous-même. Sachant que time() est une fonction qui existe vraiment sous Linux et qui fait relativement la même chose que ce que nous espérons dans le tutoriel et delay() se réfère à SDL_Delay() par exemple (pour la SDL).

    Cela permet de simplifier la recherche dans une documentation, je pense.

    Ce ne serait pas deux fois plus lent par hasard ? Ou alors il y a encore quelque chose qui échappe au novice que je suis.
    En effet, j'ai du inversé ma logique en cours de route. Corrigé

    Petite question : y'en a-t-il d'autres de prévu du même style, sur des points précis de développement de jeux ?
    Oui, je compte faire une petite série dans ce style. Malheureusement, je ne peux pas prévoir quand. Mais j'aimerai bien poser toutes les bases de la construction d'un jeu (si possible indépendamment du langage ou de la bibliothèque).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    C'est parfait merci, et bon courage !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 204
    Points : 540
    Points
    540
    Par défaut
    Tutoriel sympa pour les débutants mais qui peut véhiculer des idées pas forcément judicieuses.

    Je m'explique :

    1-Les différents pseudo-codes imposent que le rendu et la mise à jour des modèles du jeu soient purement séquentiel. Une petite remarque comme quoi le rendu peut être fait en parallèle de la mise à jour du modèle serait la bienvenue.

    2-La partie "Avoir la même vitesse de jeu sur toutes les machines" me pose problème. Elle donne l'exemple d'un calcul de physique qui est pour moi problématique. En gros, l'idée est de faire du calcul intégral (ça fait sérieux dit comme ça) pour mettre à jour le modèle physique (qui est ici vraiment basique). Dans l'exemple, le pas d'intégration est variable, or d'expérience les simulations physiques avec des pas d'intégrations variables donnent des résultats non reproductible et aussi moins stable. Pour ceux qui veulent un peu plus de détail il y a un post sur gamedev.stackexchange qui aborde le sujet. De plus, dans l'approche proposé la physique est couplé au framerate ce qui est généralement déconseillé.

    Bon je critique, mais au fond j'apprécie l'initiative

  11. #11
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par codec_abc Voir le message
    2-La partie "Avoir la même vitesse de jeu sur toutes les machines" me pose problème. Elle donne l'exemple d'un calcul de physique qui est pour moi problématique. En gros, l'idée est de faire du calcul intégral (ça fait sérieux dit comme ça) pour mettre à jour le modèle physique (qui est ici vraiment basique). Dans l'exemple, le pas d'intégration est variable, or d'expérience les simulations physiques avec des pas d'intégrations variables donnent des résultats non reproductible et aussi moins stable. Pour ceux qui veulent un peu plus de détail il y a un post sur gamedev.stackexchange qui aborde le sujet. De plus, dans l'approche proposé la physique est couplé au framerate ce qui est généralement déconseillé.
    Je suis assez d'accord , mais il est ou courant vu que c'est ce que je lui est dit mais apparemment il tenait absolument a cette méthode que je trouve complétement inutile dans notre cas et que difficile a mettre en place surtout qu'il faudrait faire l'implémentation partout ou il dépendrait du framerate (comme l'animation en général) , et que ce tutoriel s'adresse a un débutant donc avant qu'il met un CPU a genou.
    Pour ma part je pousserait plus a faire une optimisation au programmeur pour garantir une framerate constant que d'essayé ce genre de méthode.

  12. #12
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    @codec_abc :
    Entièrement d'accord avec vous. Pour votre premier point, je ne veux pas rentrer dans le cas du multithread (qui est pointé dans les points supplémentaires à approfondir si on veut aller plus loin), car ce n'est pas un truc de débutant.
    Pour le second point, je suis aussi d'accord avec vous. Le moteur physique est un truc aussi qui n'est pas de débutant et personnellement, si je commence à m'occuper d'un moteur physique, je vais aussi commencer à utiliser un vrai moteur de jeux (Unity/Godot/Unreal Engine...). Mais ça, c'est mon avis personnel.

    Dans ce tutoriel, je n'ai pas cherché à être exhaustif (contrairement au lien donné au-dessus), notamment en prenant le partie de vouloir faire un truc simple et plus orienté pour ceux qui veulent faire des jeux simples.
    J'espère, par la suite, que la rubrique accueillera un tutoriel un peu plus complet, pour compléter cette "introduction" si on peux dire.

    Après, comme j'en ai déjà discuté avec Kannagi, je suppose (pour mes développements) qu'il est impossible d'assurer à 100 % un framerate stable. Il suffit d'avoir Windows
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  13. #13
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Après, comme j'en ai déjà discuté avec Kannagi, je suppose (pour mes développements) qu'il est impossible d'assurer à 100 % un framerate stable. Il suffit d'avoir Windows
    Ce cas est relativement rare pour ne pas le prendre comme généralité ou meme le prendre on compte , sur Windows je n'ai pas vu de FPS qui change (pour mes développements ,oui a la limite de 1 fps des fois) , et je suis sur que personne ne vois la différence entre une version Windows et Linux en terme de framerate.

  14. #14
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Votre PC est un cas unique. Le problème, c'est lorsque le ralentissement il arrive. Chez moi, tous les jeux sont ralentis au moins une fois par semaine : Windows Update (souvent), des fois, ce sont mêmes pour des raisons inconnus.
    Et puis, le ralentissement peut être provoqué pour tricher. Un bon touhou (shoot em up) dans Wine, est bien plus facile, que sous Windows
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  15. #15
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Il y a pas mal de trucs qui me dérangent mais avant tout ceci :
    delay(16 - (tempsFin - tempsDebut))
    delay c'est bien une référence à la fonction sleep sur windows ? Car dans ce cas on n'attend pas (16 - (tempsFin - tempsDebut)) ms
    mais au minimum 16 - (tempsFin - tempsDebut) et ça change beaucoup.....
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  16. #16
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Sleep() ou tout autre fonction. Cela dépend du système.
    Toutefois, toutes les fonctions de sleep() ont une attente au minimum du temps indiqué (ce qui est logique). On pourrait aussi récupérer le temps vraiment attendu afin de faire en sorte de le comptabiliser dans la boucle.

    Il y a pas mal de trucs qui me dérangent
    Je serai bien heureux de les entendre.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  17. #17
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Tutorial intéressant, par contre je pense qu'il aurait été utilise de mentionner que l'on ne va généralement pas utiliser une boucle while pour la boucle d'un jeu.
    Généralement, les moteurs de jeu ont une fonction bien spécifique appelée au rafraîchissement de l'image. Ne pas utiliser celle-ci peut sérieusement nuire aux performances. En javascript par exemple on utiliser plutôt la fonction "requestanimationframe" qui est appelée à chaque mise à jour l'affichage, permettant ainsi au système de ne pas gaspiller de ressources en effectuant des calculs plus souvent que nécessaire.

  18. #18
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    La boucle while() existe bel et bien, sauf que dans les moteurs de jeux vidéos elle n'est pas accessible. Par contre, dans les moteurs de jeux vidéo, on vous propose juste de remplir les méthodes render() et update(), qui seront appelées dans la boucle while().
    Je suppose qu'il en est de même pour la fonction requestanimationframe() (qui correspond à render()). Enfin, c'est mon hypothèse.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  19. #19
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    Excellent tutoriel pour un ultra-débutant comme moi dans le domaine du développement de jeux vidéo

    Vraiment Merci pour ce tuto .
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 204
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    @codec_abc :
    Entièrement d'accord avec vous. Pour votre premier point, je ne veux pas rentrer dans le cas du multithread (qui est pointé dans les points supplémentaires à approfondir si on veut aller plus loin), car ce n'est pas un truc de débutant.
    Je suis passé à coté de la remarque donc je retire ma critique sur le point 1.

    Citation Envoyé par LittleWhite Voir le message
    Pour le second point, je suis aussi d'accord avec vous. Le moteur physique est un truc aussi qui n'est pas de débutant et personnellement, si je commence à m'occuper d'un moteur physique, je vais aussi commencer à utiliser un vrai moteur de jeux (Unity/Godot/Unreal Engine...). Mais ça, c'est mon avis personnel.

    Dans ce tutoriel, je n'ai pas cherché à être exhaustif (contrairement au lien donné au-dessus), notamment en prenant le partie de vouloir faire un truc simple et plus orienté pour ceux qui veulent faire des jeux simples.
    J'espère, par la suite, que la rubrique accueillera un tutoriel un peu plus complet, pour compléter cette "introduction" si on peux dire.

    Après, comme j'en ai déjà discuté avec Kannagi, je suppose (pour mes développements) qu'il est impossible d'assurer à 100 % un framerate stable. Il suffit d'avoir Windows
    Je ne suis qu'à moitié d'accord. La volonté de faire un tutoriel simple me parait une très bonne chose. Il est souhaitable de ne pas surcharger les débutants d'informations sinon on risque de les perdre et au final cela s’avère peu constructif. Mais (oui il y a toujours un mais) que l'on prône une approche simple (ou pas) il me parait judicieux de donner quelques informations sur les limites de l'approche choisi. Sinon, on risque de véhiculer l'idée que cette approche est parfaite et qu'il n'y a pas de raison de faire autrement. Or c'est faux, en informatique il y a rarement une approche parfaite pour résoudre un problème dès que celui devient un tant soit peu complexe.

Discussions similaires

  1. comprendre ce programme
    Par diamentelle dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/04/2009, 15h33
  2. Comprendre un programme Matlab?
    Par nejm59 dans le forum MATLAB
    Réponses: 22
    Dernier message: 12/12/2008, 20h32
  3. Comprendre un programme
    Par Konala dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 27/10/2008, 12h21
  4. Comprendre un programme C simple décompilé
    Par _jeez_ dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 07/10/2007, 16h06
  5. Réponses: 1
    Dernier message: 25/08/2007, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo