Partage
  • Partager sur Facebook
  • Partager sur Twitter

creation jeux de baston 2d

sdl

    27 février 2008 à 18:06:52

    bonjours a tous,
    voila je me suis lancé dans la creation de mon propres jeu de baston en 2D.
    je vai le faire en C++ en utilisant SDL .
    je ne suis pas tres bon en programmation je suis en premiere année de DUT informatique(-.-)
    je voudrai avoir votre avis sur deux points:

    premier point: -etant donné qu' un programme en C++(ou c) est une lecture de ligne de codes que on ne peut pas lui faire executer plusieur fonction en meme temps, il est donc impossible de demander au programme deffectuer de faire une animation entiere en meme temps avec deux personnage.
    j'ai donc decider de faire une boucle for dans laquelle i est un frame.
    donc a chaque boucle de ce for le programme regarde si l'utilisateur demande a son perso d'avancer , et ne charge que le la premiere image de l'animation d'avancée du perso puis regarde si le deuxieme personnage veut bouger, et lance l'image de l'animation desiré. en fin de boucle il affiche l'image final a l'ecran.
    je voudrai savoir mon choix est le bon ou si il y a plus simple que de faire une boucle for .merci


    deuxieme point : voila je ne sait pas pourquoi mais lorsque je fait en debut de programme #include<string> et #include <string.h> je peut utiliser les string dans mon main , mais je ne peut pas les utiliser (ni initialiser ni rien) dans mes classes (j'ai marquer aussi les includes dans les fichier de mes classes -.-).De cette facon je ne peut pas stoker le nom des images a loader dans des tableaux pour les utiliser avec SDL_LoadBMP("nom du fichier.bmp");
    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2008 à 18:10:51

      SDL_LoadBMP(); utilise des chaînes de C!

      Pour convertir tes string, utilise la méthode c_str(); qui renvoie une chaine de caractères.

      Sinon, pour les classes, il faut inclure le fichier à chaque source de la classe.
      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2008 à 18:14:21

        tu n'as pas besoin de lancer plusieurs fonctions en meme temps.

        un jeu, c'est :

        1. initialiser();
        2. while(!gameover)
        3. {
        4.   recuperer_les_evenements();
        5.   evolution();
        6.   affichage();
        7. }
        8. liberer();


        tu dois te faire une classe "perso" par exemple, et dans "evolution()" tu fais evoluer chaque perso. Mais aucune instruction ne doit etre bloquante
        Tu peux imaginer, par exemple, une methode :

        perso::setanimation(....) // ici, tu définis ton animation
        perso::mise_a_jour(float tempspasse); // ici, tu donnes le temps, tu calcules l'animation courante
        perso::afficher(); // a appeler dans "affichage", l'affichage illustre les structures, c'est tout.

        quand tu définis une animation, tu la stockes d'une maniere ou d'une autre dans ta classe, mais tu ne bloques pas, tu sors tout de suite.
        et quand tu demandes la mise a jour du perso du perso, la classe doit etre capable, toujours sans attendre, de mettre a jour l'image du perso, sa position, tout...

        Jamais de WAIT !!! Jamais...
        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          27 février 2008 à 18:23:45

          Citation : George369

          SDL_LoadBMP(); utilise des chaînes de C!

          Pour convertir tes string, utilise la méthode c_str(); qui renvoie une chaine de caractères.

          Sinon, pour les classes, il faut inclure le fichier à chaque source de la classe.



          merci de repondre si vite. mais comment faire pour inclure le fichier a chaque source de la classe ?


          ps message a Fvirtman :
          merci bocoup je ne comprends pas tout mais je v etudier ce que tu a marqué et je posterai un massage si je ne comprends pas tout.


          merci a vous deux

          edit:
          Fvirtman , je pense que tu doit te tromper(enfin je n'est fait que qelques mois de programmation mais bon arret moi tt de suite si j'ai faux)
          tu a dit que le programme doit etre de la forme:

          initialiser();
          while(!gameover)
          {
          recuperer_les_evenements();
          evolution();
          affichage();
          }
          liberer();

          mais si le programme recupere un evenement il passe ensuite a evolution; mais si le programme rentre dans evolution, il ne peut pas recuper un autre evenement en meme temps. donc le programme va attendre que l'animation soit fini pour recuperer un autre evenement et donc faire une autre animation , de cette manniere on ne peut pas faire avancer les deux personnages en meme temps non ? ( je doit peut etre avoir tout faux mais bon) eclaire moi s'il te plait.
          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2008 à 19:47:15

            suffit de passer un paquet d'évènement à évolution et pas un seul.
            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2008 à 22:31:29

              ugo292002 > non, je ne me trompe pas :)

              Déja, la fonction recuperer_les_evenements() dont je parle n'est pas bloquante non plus : elle utilise (avec SDL), PollEvent : qui est une fonction qui recupere un evenement s'il y en a un, et n'en récupere pas s'il n'y en a pas, mais en aucun cas ne s'arrete :)

              Si tu utilises WaitEvent, met la dans un sac, fait un noeud, et brule la :)
              Aucune fonction qui attend ! faut que ça tourne !

              Cette fonction (moi c'est la façon dont je m'en sers), remplis un tableau de booleens : true si la touche est enfoncée, false si elle ne l'est pas.
              Ce tableau peut ensuite etre lu par la fonction d'évolution, lu comme un simple tableau : les events sont isolés dans la fonction recuperer_les_evenements(), une fois pour toutes.

              PS : je sais que cette technique marche (regarde mes petits projets dans ma signature), ça fait ses preuves :)
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                28 février 2008 à 1:17:29

                Je te recommande très chaudement SFML qui est un SDL-like que je trouve bien mieux pour le C++ (en C je ne sais pas). Je te conseil de le tester et voir ce qui te plaît le plus ;)

                http://sfml.sourceforge.net/index-fr.php
                • Partager sur Facebook
                • Partager sur Twitter
                  28 février 2008 à 13:11:34

                  merci a vous de m'aider.
                  mais pouvez vous me dire ce qu'entends george369 par "il faut inclure le fichier à chaque source de la classe" , merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 février 2008 à 15:04:38

                    Oui c'est ça: si tu fais une classe, t'auras une source comme "maclasse.cpp" et un header comme "maclasse.h"; en chaque début de *.cpp tu mets un #include <SDL/SDL.h> par exemple.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 février 2008 à 10:14:41

                      je l'ai deja fait mais mon fichier ne reconnait toujours pas les string dans mes classes -.-
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 février 2008 à 10:23:46

                        Dans un fichier .hp ou hpp et donc dans une class tu ne peut pas déclarer un string comme ceci :
                        string monString;

                        Mais tu peut le faire en faisant ainsi :
                        std::string monString;
                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 février 2008 à 11:46:30

                          Ou alors:

                          using namespace std;
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            29 février 2008 à 11:59:57

                            NAAAAAAAAAAAANNNNNNNNNNNN !!!
                            Ne JAMAIS faire using machin dans un header .
                            Pour justification , cf les FAQ
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 février 2008 à 13:48:07

                              wow pas de violence ! :p

                              l'informatique et la violence ne va jamais ensemble.

                              Pour le "using namespace", on peut, mais c'est contre-indiqué je sais.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 mars 2008 à 10:30:04

                                ok merci les gars de m'aider je vai essayer

                                au fait j'ai une autre question pour Fvirtman mais les autres peuvent repondre;
                                dans le morceau de code qu'il ma donner je ne voi toujours pas comment executer reelment deux fonction simultanement , alors j'ai fait des recherches et je suis tombrer sur les threads et les mutex .
                                comme sur tous les forum ou je suis aller personne ne m'a conseiller de les utiliser pour fare mon jeu .je me demande si c un outils a utiliser , alors question : faut-il utiliser les threads et mutex pour faire realiser des actions simultanement dans mon jeux de combat 2d ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  1 mars 2008 à 15:22:44

                                  Non; pas de threads dans ton jeu ! Il faut :
                                  1 - Recevoir les évènements
                                  2 - Mettre à jour les infos sur les joueurs (position, vies, etc...)
                                  3 - Afficher ( et le son tiens )

                                  Pour afficher, tu codes une fonction qui affiche une frame de ton animation en fonction du temps écoulé.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 mars 2008 à 10:21:06

                                    Faire des threads n'est pas une bonne idée.
                                    Les treads ne sont pas a voir comme des fonction synchrones simultanées, mais concurentes. J'explique:
                                    Si j'ai deux fonction F et G composées d'instructions (f1,f2 ....) et (g1,g2 ...)

                                    F(){f1;f2;f3}
                                    G(){g1;g2;g3}

                                    Si tu appelles normalement: F()G()
                                    Tu va exécuter tout séquentiellement:
                                    {f1;f2;f3; g1;g2;g3}

                                    Si tu veux exécuter F et G de manière concurente tu va exécuter
                                    f1 g1 g2 g3 f2 f3
                                    ou bien
                                    g1 f1 g2 f2 f3 g3
                                    ou bien autre chose.
                                    Tu aura juste les instruction de F dans l'ordre mélangées avec des instructions de G dans l'ordre.

                                    Pire si tu veux mettre f et g dans une boucle ils seront désynchronisés c'est à dire que tu peux avoir
                                    f1 f2 f3 f1 f2 f3 f1 f2 f3 g1 g2 f1 f2 f3 g3

                                    maintenant si t'as un jeu de baston : f représente les coups du joueur 1 et g ceux du joueur 2, tu vois tout de suite que le mielleur joueur n'est pas le plus habile c'est celui qui est pote avec l'OS et dont la fonction exécute un maximum de taches.

                                    Par conséquent je te conseille la stratégie
                                    1) dépiler tous les évènements
                                    2) traiter tous les évènements
                                    3) afficher en fonction du temps écoulé depuis le dernier affichage
                                    4) retourner à l'étape 1
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 mars 2008 à 10:29:53

                                      ugo292002 > non, pas de threads !!
                                      On n'excute pas 2 fonctions en meme temps !

                                      Comme je te disais plus haut, il faut faire des fonctons non bloquantes.

                                      Une animation, ce n'est pas :
                                      - on affiche une image, on attend, on en affiche une autre, on attend.
                                      Non, il faut te sortir cette philosophie de la tete.

                                      Une animation, c'est :
                                      - on déclare que l'animation sera une séquence d'images, on sort faire autre chose
                                      - a chaque tour de boucle (sans jamais de wait), on fait évoluer : c'est a dire qu'on prépare une fonction qui, en fonction du chronometre présent, et de ce qu'on lui a déclaré au début (la séquence d'images) va afficher la bonne image, mais SANS JAMAIS DE WAIT.

                                      Je suis un peu embeté que tu me parles encore de "2 focntions simulténament", ça veut dire que tu n'as rien compris a ce que j'ai mis plus haut :( Et comme ce que je viens de mettre ici est la meme chose exprimé d'une autre façon, j'ai peur que ça ne serve a rien :(

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                        8 mars 2008 à 10:22:33

                                        d'accord merci bocoup maintenant je pense etre fin pret pour pouvoir realiser mon jeux
                                        si j'ai une autre question je la poserai ici
                                        merci infiniment
                                        edit: effectivment je souhaite avoir votre avis aussi sur un point
                                        j'hesite sur le point de stockage des sprites de mes personnage;
                                        j'avais tout d'abors penser a les stocker dans les tableaux eux meme placer dans la classe du personnage
                                        pour pouvoir les utuliser dans ma fonction main de maniere plus ordonnée, est-ce le bon choix ?
                                        (dans ma classe {on va dire que mon perso s'appelle KEN -.-(pour cahnger)} KEN j'ai donc autant de tableau que d'annimation possible du personnage (sauter[] , attendre[], avancer[], ...)
                                        merci de me dire si mon choix est le bon s'il vous plait .
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          8 mars 2008 à 11:42:05

                                          Si tu veux pousser le vice tu peux même faire un tableau de tableau :diable:
                                          J'ai pas tout lu mais ça dot être ça et pour animer ton image tu change d'image tout les tantôt.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            8 mars 2008 à 14:38:42

                                            merci ( et bravo pour ta citation: geek
                                            XD
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            creation jeux de baston 2d

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown