Partage
  • Partager sur Facebook
  • Partager sur Twitter

Je n'arrive pas à faire de saut en SDL langage C.

Sujet résolu
    27 avril 2019 à 23:37:42

    Salut le forum d'OpenClassroom,

    Volià ça fait maintenant un mois que je travaille sur un saut en SDL, et malgré de nombreuses visites sur les sites comme celui de Fvirtman (que je remercie par ailleurs pour ses super tutos),  les forums voisins ainsi que celui-ci, je n'ai rien trouvé que je puisse comprendre. :(

    Beaucoup de formule mathématiques et physique, parabole, position absolue et relative, vitesse x et y et enfin tout un tas de constantes comme la constante gravitationnelle.

    De plus, j'ai beau essayé tout un tas de manip, rien n'y fait. T-T

    J'ai essayé de modifié des coordonnées SDL_Rect ("y" en particulier) et de faire des SDL_Delay mais ça ne fonctionne pas.

    Donc je viens sur le forum à la recherche du Saint Graal en espérant que l'on puisse m'aider malgré mon niveau pourri en maths et en physique. :-° 

    J'aimerais faire un saut un peu comme sur Mario Bros de la NES (réaliste mais pas trop quoi !) et que vous m'expliquiez pour que je comprenne seul.

    Je vous remercie par avance.

    • Partager sur Facebook
    • Partager sur Twitter

    La persévérance paye toujours malgré les obstacles.

      1 juin 2019 à 17:34:11

      Il n'y à vraiment personne qui puisse m'aider ?  :o
      • Partager sur Facebook
      • Partager sur Twitter

      La persévérance paye toujours malgré les obstacles.

        4 juin 2019 à 22:40:25

        Salut, pour faire cela il te suffit des notions de base de cinématique (au programme en terminale S)

        Sinon tu peux t'aider de tutos plutôt bien expliqués tel que celui-ci !

        • Partager sur Facebook
        • Partager sur Twitter
          5 juin 2019 à 12:40:01

          Codz_01 a écrit:

          Salut, pour faire cela il te suffit des notions de base de cinématique (au programme en terminale S)

          Sinon tu peux t'aider de tutos plutôt bien expliqués tel que celui-ci !


          Ok je regarde ça et je vous tiens au courant. ;)
          • Partager sur Facebook
          • Partager sur Twitter

          La persévérance paye toujours malgré les obstacles.

            11 juin 2019 à 23:40:41

            Codz_01 a écrit:

            Salut, pour faire cela il te suffit des notions de base de cinématique (au programme en terminale S)

            Sinon tu peux t'aider de tutos plutôt bien expliqués tel que celui-ci !

            Malheureusement j'ai déjà visiter ce site et cela ne m'a que peux aider. :( Auriez-vous un prototype à m'expliquer ?



            • Partager sur Facebook
            • Partager sur Twitter

            La persévérance paye toujours malgré les obstacles.

              12 juin 2019 à 18:38:17

              Je ne vois pas ce que tu ne comprends pas sur ce tutoriel ? Si tu me donnais plus d'indications sur les points précis que tu ne comprends las je pourrai mieux t'aider !
              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2019 à 0:29:12

                D'accord donc tout d'abord j'ai beau essayer de faire la première formule de parabole mais je suis coincé.

                J'essaye de faire un truc du genre. 

                sprite.y = (vx*vx) + sprite.y + 100;

                Mais je me rend compte rapidement que cela ne fonctionne pas.

                Du coup je me suis penché vers les lois de la physique : avec les vitesse_x et vitesse_y, la gravité, etc..:)

                Donc j'ai trouvé ce saut qui me parait être le plus proche de mes attentes.

                http://fvirtman.free.fr/recueil/02_02_01_02_saut.c.php

                Le problème c'est que malgré avoir relus 2 ou 3 fois le cours de @Mateo21 je n'ai pas pu comprendre les fonctions qu'il avait crée.:(

                Je suis coincé surtout par les appels de fonction qu'il exécutent tout le long du programme.

                Et comme je ne sais pas me servir des appels de fonctions ou des header comme il faut, je me retrouve avec de mains de 300 ligne. o_O

                Pourrais-tu m'aider s'il te plait ?

                • Partager sur Facebook
                • Partager sur Twitter

                La persévérance paye toujours malgré les obstacles.

                  14 juin 2019 à 9:29:34

                  Ok alors je t'explique une façon vraiment simple de faire :

                  1- Il te faut un personnage (que l'on va représenter ici par un carré). On lui attribue des coordonnées initiales : Ix=0, Iy=400, et des coordonnées qui bougeront en même temps que le perso (P pour position) : Px=0, Py=400

                  2- Tu initialises les constantes de gravitation (c'est l'accélération) : par exemple Ax=0 et Ay=9 (et non -9 car l'axe des y est tourné vers le bas !)

                  3- Tu initialises la vitesse initiale : par exemple Vx=10, Vy=-50

                  4- Puis tu boucles tant que y > Iy

                  5- Dans cette boucle :

                  · Effacer le perso aux coordonnées Px et Py

                  · Rajouter A à V (Vx += Ax, Vy += Ay)

                  · Rajouter V à P (Px += Vx, Py += Vy)

                  · Afficher le perso aux coordonnées Px et Py

                  · Attendre un certain temps

                  -
                  Edité par Codz_01 14 juin 2019 à 9:30:52

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2019 à 19:59:42

                    Salut,

                    Il faudrait aussi un peu de code pour mieux t'aider.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                      14 juin 2019 à 22:02:25

                      yo@n97one Je n'ai pas de code sous la main mais ce projet m'a l'air d'être à la portée de n'importe qui ayant suivi les bases du tuto SDl d'OC !!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 juin 2019 à 22:34:40

                        Pas de code de toi @COdz_01, le code du PO, s'il a des problèmes avec son code, ce serait mieux qu'il le poste pour avoir de l'aide.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                          15 juin 2019 à 8:50:53

                          Ah oui autant pour moi ! ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 juillet 2019 à 22:31:46

                            Bonjour, et excusez-moi pour ce long retard de 2 semaines. :-°

                            Donc tout d'abord Codz_01, merci de ta réponse, j'ai suivi un peux ce que tu m'as donné comme solution et cela me rappelle un code vu sur un site que j'ai visiter.:)

                            En ce qui concerne le code il faudrait que je le refasse étant donné que je n'avais pas compris, je m'étais dis que ce n'étais pas du tout à ma portée. 

                            Je suis alors retourné sur le site de Fvirtman et j'ai relu plusieurs fois le dit programme, étant donné que c'est le saut de plateforme qui se rapproche le plus de mes attentes, et il me semble que je commence à comprendre. Mais une fois que j'ai compris à peu près le fonctionnement, viens le problème de l'animation et des mouvements.:colere:

                            Je m'explique, je veux bouger avec mon personnage mais mon animation est en cours. Donc en faisant le mouvement du personnage je me retrouve face à un clignotement très désagréable lorsque je clique sur la flèche de mouvement. Et comme ce problème si est encore en cours, je ne me suis pas résolu à essayer de rajouter le saut au jeu. 

                            Auriez-vous une quelconque idée à me proposer ?

                            Merci d'avance.

                            En plus : Voici le code actuel.

                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <SDL/SDL.h>
                            
                            #include "game.settings.h"
                            #include "move.h"
                            
                            #define FPS 60
                            
                            void framerate(int starting_tick)
                            {
                                starting_tick = SDL_GetTicks();
                            
                                if((1000/FPS) > 0)
                                {
                                    SDL_Delay(1000/FPS);
                                }
                            }
                            
                            int main(int argc, char *argv[])
                            {
                                atexit(SDL_Quit);
                            
                                int go = 1, starting_tick = 0, bg_tick = 0;
                                SDL_Event commandes;
                                SDL_Rect bgPosition, positionHero;
                            
                                bgPosition.x = BG_POSITION_Y;
                                bgPosition.y = BG_POSITION_Y;
                                positionHero.x = 50;
                                positionHero.y = 370;
                            
                                SDL_Init(SDL_INIT_VIDEO);
                            
                                SDL_WM_SetIcon(SDL_LoadBMP("iconrpg.bmp"), NULL);
                            
                                SDL_Surface *screen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                            
                                SDL_WM_SetCaption("Hikaru's Great Adventure", NULL);
                            
                                SDL_Surface *bg1 = SDL_LoadBMP("background - Sp1.bmp");
                                SDL_BlitSurface(bg1, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg2 = SDL_LoadBMP("background - Sp2.bmp");
                                SDL_BlitSurface(bg2, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg3 = SDL_LoadBMP("background - Sp3.bmp");
                                SDL_BlitSurface(bg3, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg4 = SDL_LoadBMP("background - Sp4.bmp");
                                SDL_BlitSurface(bg4, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg5 = SDL_LoadBMP("background - Sp5.bmp");
                                SDL_BlitSurface(bg5, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg6 = SDL_LoadBMP("background - Sp6.bmp");
                                SDL_BlitSurface(bg6, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg7 = SDL_LoadBMP("background - Sp7.bmp");
                                SDL_BlitSurface(bg7, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg8 = SDL_LoadBMP("background - Sp8.bmp");
                                SDL_BlitSurface(bg8, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg9 = SDL_LoadBMP("background - Sp9.bmp");
                                SDL_BlitSurface(bg9, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg10 = SDL_LoadBMP("background - Sp10.bmp");
                                SDL_BlitSurface(bg10, NULL, screen, &bgPosition);
                            
                                SDL_Surface *bg11 = SDL_LoadBMP("background - Sp11.bmp");
                                SDL_BlitSurface(bg11, NULL, screen, &bgPosition);
                            
                                SDL_Surface *hero1RIGHT = SDL_LoadBMP("hero1RIGHT - Sp1.bmp");
                                SDL_SetColorKey(hero1RIGHT, SDL_SRCCOLORKEY, SDL_MapRGB(hero1RIGHT->format, 255, 255,0));
                            
                                SDL_Surface *hero1LEFT = SDL_LoadBMP("hero1LEFT - Sp1.bmp");
                                SDL_SetColorKey(hero1LEFT, SDL_SRCCOLORKEY, SDL_MapRGB(hero1LEFT->format, 255, 255,0));
                            
                                SDL_Surface *hero1FACE = SDL_LoadBMP("hero1FACE.bmp");
                                SDL_SetColorKey(hero1FACE, SDL_SRCCOLORKEY, SDL_MapRGB(hero1FACE->format, 255, 255,0));
                                SDL_BlitSurface(hero1FACE, NULL, screen, &positionHero);
                            
                                SDL_Flip(screen);
                            
                                SDL_EnableKeyRepeat(5,5);
                            
                                while(go)
                                {
                                    framerate(starting_tick);
                            
                                    bg_tick = SDL_GetTicks();
                            
                                    SDL_PollEvent(&commandes);
                            
                                       if(bg_tick < 1000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg1, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                            
                                            if(bg_tick > 1000 && bg_tick < 2000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg2, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 2000 && bg_tick < 3000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg3, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 3000 && bg_tick < 4000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg4, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 4000 && bg_tick < 5000)
                                            {                    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg5, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 5000 && bg_tick < 6000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg6, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 6000 && bg_tick < 7000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg7, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 7000 && bg_tick < 8000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg8, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 8000 && bg_tick < 9000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                    SDL_BlitSurface(bg9, NULL, screen, &bgPosition);
                                            SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 9000 && bg_tick < 10000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg10, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                            if(bg_tick > 10000 && bg_tick < 11000)
                                            {
                                                SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                                                SDL_BlitSurface(bg11, NULL, screen, &bgPosition);
                                                SDL_Flip(screen);
                                            }
                            
                                    switch(commandes.type)
                                    {
                                        case SDL_QUIT:
                                            go = 0;
                                            break;
                            
                                        case SDL_KEYDOWN:
                                            if(commandes.key.keysym.sym == SDLK_RIGHT)
                                            {
                            
                                                SDL_BlitSurface(hero1RIGHT, NULL, screen, &positionHero);
                                                positionHero.x+= 7;
                            
                                                if(positionHero.x > 675)
                                                    positionHero.x = 675;
                            
                                                SDL_Flip(screen);
                                            }
                            
                                            if(commandes.key.keysym.sym == SDLK_LEFT)
                                            {
                                                SDL_BlitSurface(hero1LEFT, NULL, screen, &positionHero);
                                                positionHero.x -= 7;
                            
                                                if(positionHero.x < 0)
                                                    positionHero.x = 0;
                            
                                                SDL_Flip(screen);
                                            }
                                            break;
                            
                                        default:
                                            break;
                                    }
                            
                                }
                            
                                SDL_FreeSurface(bg1);
                                SDL_FreeSurface(bg2);
                                SDL_FreeSurface(bg3);
                                SDL_FreeSurface(bg4);
                                SDL_FreeSurface(bg5);
                                SDL_FreeSurface(bg6);
                                SDL_FreeSurface(bg7);
                                SDL_FreeSurface(bg8);
                                SDL_FreeSurface(bg9);
                                SDL_FreeSurface(bg10);
                                SDL_FreeSurface(bg11);
                                SDL_FreeSurface(hero1RIGHT);
                                SDL_FreeSurface(hero1LEFT);
                            
                                SDL_Quit();
                                return EXIT_SUCCESS;
                            }
                            
                            



                            • Partager sur Facebook
                            • Partager sur Twitter

                            La persévérance paye toujours malgré les obstacles.

                              25 juillet 2019 à 10:28:29

                              Salut,

                              • Utilise un seul SDL_Flip à la fin de ta boucle.
                              • SDL_PollEvent est mal utilisée ici. Elle s'utilise dans une boucle.
                              • bg1, bg2, ..., bg11, utilises un tableau.
                              • Tu te rends compte qu'il n'y a qu'une seule instruction qui diffère dans tous tes blocs if avec le SDL_MapRGB, le SDL_BlitSurface et le SDL_FLip ? Note que si tu utilises un tableau, tu n'auras même pas besoin de if, il te suffira de blit la surface bg[bg_tick / 1000].
                              • Il se passe quoi quand bg_tick est supérieur à 11000.
                              • Et tu devrais rendre certaines égalités larges et non strictes, là tu ne fais rien par exemple si bg_tick est exactement égal à 1000. En fait, le mieux ce serait que tu utilises des else if. Comme ça tu pourras avoir if(bg_tick &lt; 1000), else if(bg_tick &lt; 2000), etc. Mais comme dit plus haut, avoir un tableau règle tous ces soucis.
                              • Vérifie le retour des fonctions à risques.
                              • Indente mieux ton code.

                              EDIT : éditeur de mre, remplace &lt; par <.

                              -
                              Edité par yo@n97one 25 juillet 2019 à 10:29:19

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                20 août 2019 à 17:46:43

                                Bonjour et merci de votre réponse ! Je suis toujours en retard je m'en excuse. ^^

                                Pour répondre à tout ce que vous m'avez dis :

                                1 - Je suis nouveau, les notions peuvent parfois me paraître compliquées, mais je ne me suis jamais bien servis de SDL_Flip, je ne sais pas faire. J'en ai mis plusieurs car lorsque je ne les mettais pas, les sprites du jeu laisser des trainées derrières eux. Pourriez-vous m'expliquer pourquoi, s'il vous plait ?

                                2 - On m'a souvent dis de mettre SDL_PollEvent lorsque la boucle en question était un while. Du coup je fais comme ça. Comment l'utiliser ?

                                3 - Un tableau ?

                                4 - C'est à dire "une seule instruction qui diffère" ? Je ne savais pas que c'était possible avec des tableaux. Je vous remercie et je vais essayer dès que possible. :D

                                5 - Normalement il était sensé y avoir 15 conditions qui sont responsables de l'animation du background seulement je n'ai pas fini les différentes surfaces de l'animation mais lorsque bg_tick est supérieur à 15000 alors le compteur est remis à zéro et l'animation repart elle aussi de zéro. Seulement je trouve que c'est long. Y'aurait-il une technique plus courte ?

                                6 - "Larges et non strictes" ? Qu'est-ce que ça veut dire ? Malgré l'edit je ne comprend pas l'usage précis de &lt; ? A quoi sert-il ? Je vais me renseigner sur l'usage des tableaux en SDL, je vous remercie. ;)

                                7 - "Le retour des fonction à risques" ? Les destructeurs ?

                                8 - La forme vous voulez dire ? Je ferais en sorte. Merci. :D

                                Je sais que je pose un grand nombre de questions mais ma logique me bloque. Il me faut réfléchir trop longtemps pour comprendre. Merci de votre aide !

                                • Partager sur Facebook
                                • Partager sur Twitter

                                La persévérance paye toujours malgré les obstacles.

                                  21 août 2019 à 5:37:26

                                  Bonjour je suis en train de suivre le tuto sur la sdl et openGL (https://openclassrooms.com/fr/courses/966823-developpez-vos-applications-3d-avec-opengl-3-3/960899-premier-affichage) et j'ai une erreur lors de la compilation (je le fais à partir d'un terminal et pas sur codeblock comme c'est indiqué dans le tuto). Lorsque je tape dans le terminal la commande suivante :

                                  g++ main.cpp SceneOpenGL.cpp -o main -lglut -lGLU -lGL


                                  Cela me renvoie :

                                  /tmp/cchEsePb.o : Dans la fonction « SceneOpenGL::~SceneOpenGL() » :
                                  SceneOpenGL.cpp:(.text+0x70) : référence indéfinie vers « SDL_GL_DeleteContext »
                                  SceneOpenGL.cpp:(.text+0x80) : référence indéfinie vers « SDL_DestroyWindow »
                                  SceneOpenGL.cpp:(.text+0x85) : référence indéfinie vers « SDL_Quit »
                                  /tmp/cchEsePb.o : Dans la fonction « SceneOpenGL::initialiserFenetre() » :
                                  SceneOpenGL.cpp:(.text+0xad) : référence indéfinie vers « SDL_Init »
                                  SceneOpenGL.cpp:(.text+0xcf) : référence indéfinie vers « SDL_GetError »
                                  SceneOpenGL.cpp:(.text+0xf4) : référence indéfinie vers « SDL_Quit »
                                  SceneOpenGL.cpp:(.text+0x10d) : référence indéfinie vers « SDL_GL_SetAttribute »
                                  SceneOpenGL.cpp:(.text+0x11c) : référence indéfinie vers « SDL_GL_SetAttribute »
                                  SceneOpenGL.cpp:(.text+0x12b) : référence indéfinie vers « SDL_GL_SetAttribute »
                                  SceneOpenGL.cpp:(.text+0x13a) : référence indéfinie vers « SDL_GL_SetAttribute »
                                  SceneOpenGL.cpp:(.text+0x172) : référence indéfinie vers « SDL_CreateWindow »
                                  SceneOpenGL.cpp:(.text+0x1a5) : référence indéfinie vers « SDL_GetError »
                                  SceneOpenGL.cpp:(.text+0x1ca) : référence indéfinie vers « SDL_Quit »
                                  SceneOpenGL.cpp:(.text+0x1e1) : référence indéfinie vers « SDL_GL_CreateContext »
                                  SceneOpenGL.cpp:(.text+0x1fe) : référence indéfinie vers « SDL_GetError »
                                  SceneOpenGL.cpp:(.text+0x232) : référence indéfinie vers « SDL_DestroyWindow »
                                  SceneOpenGL.cpp:(.text+0x237) : référence indéfinie vers « SDL_Quit »
                                  /tmp/cchEsePb.o : Dans la fonction « SceneOpenGL::bouclePrincipale() » :
                                  SceneOpenGL.cpp:(.text+0x2df) : référence indéfinie vers « SDL_WaitEvent »
                                  SceneOpenGL.cpp:(.text+0x357) : référence indéfinie vers « SDL_GL_SwapWindow »
                                  collect2: error: ld returned 1 exit status
                                  
                                  Je travaille sur Ubuntu. Les fichiers utilisés se situe à l'adresse suivante : http://user.oc-static.com/ftp/developpez-vos-applications-3d-avec-opengl-3-3/Code+Source+du+Chapitre+3.zip 
                                  Merci d'avance si quelqu'un aurait une solution.
                                  PS : Désolé de poser ma question au milieu d'un autre problème mais je n'arrive pas à créer un forum pour poser ma question.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 août 2019 à 14:13:30

                                    Alors,

                                    1. Je pense que tu n'effaçais pas bien ton écran. La méthode c'est au début de la boucle j'efface l'écran, puis je fais tout ce que j'ai à faire et à la fin je mets à jour l'écran (une seule fois).
                                    2. Tu peux regarder le tutoriel de Fvirtman où il explique ça (et donne en plus une méthode pour gérer les évènements que tu peux utiliser pour te simplifier la vie).
                                    3. Oui, un tableau de SDL_Surface *. Tu aurais alors bg[0],bg[1], ... et bg[10].
                                    4. Avec le tableau ça donnerait un truc du genre.
                                    SDL_BlitSurface(bg[bg_tick/1000], NULL, screen, &amp;bgPosition);
                                    

                                    En effet, si bg_tick est plus petit que 1000, bg_tick/1000 vaut 0, si 1000 <= bg_tick < 2000, bg_tick/1000 vaut 1, etc.

                                    1. Ben le point 4 y répond un peu, plus de condition avec le tableau.
                                    2. Ce que je veux dire c'est que si bg_tick < 1000, tu fais quelque chose, si bg_tick > 1000, tu fais quelque chose, mais pas si bg_tick est égal à 1000 (pareil pour 2000, 3000, etc.). Tu n'as que des inégalités strictes (que des > et des < et aucune large (pas de >= ou de <=). Les < sont des bugs d'OC, en fait ce sont des <. Mais là encore, avec le tableau ce problème disparaît. ;)
                                    3. Si le chargement de la SDL échoue, ou si on ne réussit pas à ouvrir de fenêtres ou encore si le chargement d'une image échoue, il se passe quoi ?
                                    4. Oui c'est ça.

                                    Pas de problème, c'est mieux de prendre son temps pour bien comprendre. :)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                      23 août 2019 à 9:45:16

                                      yo@n97one, je vous remercie du temps que vous prenais pour m'aider pour commencer. 

                                      Ensuite, en ce qui concerne la ligne de code pour le tableau, concrètement et littéralement ça veut dire quoi ?

                                      Pour la suite, vous voulez dire que le tableau va initialiser les surfaces dans plusieurs adresse mémoire en une seule ligne de code (où je me fais des rêves ?:D).

                                      En ce qui concerne l'effacement de l'écran, j'ai compris, merci ! ;)

                                      Pour la 5ème réponse, je n'ai pas vraiment compris l'explication, pourriez-vous développer ? 

                                      Encore désolé pour les nombreuses questions. :honte:

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      La persévérance paye toujours malgré les obstacles.

                                      Je n'arrive pas à faire de saut en SDL langage C.

                                      × 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