Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL]Timer, structure, et callback

Sujet résolu
    27 juillet 2006 à 14:33:06

    salut,

    D'abords je cite m@teo21 :)

    Citation : m@teo21

    Si vous voulez envoyer plusieurs variables à la fois, c'est tout à fait possible : créez une structure personnalisée qui contiendra les variables que vous voulez. C'est d'ailleurs ce qu'on fait avec notre positionZozor qui contient les sous-variables x et y !



    Alors je crée une structure qui contient les variable de positions de plusieurs objets avec SDL_Rect et j'affecte des variables (rien d'important) :

       
        struct
            {
                SDL_Rect r1;
                SDL_Rect r2;
                SDL_Rect balle;
            } pos;
       
        pos.r1.x = 0;
        pos.r1.y = 275;
        pos.r2.x = 795;
        pos.r2.y = 275;
        pos.balle.x = 398;
        pos.balle.y = 298;


    Après je met l'addresse de la structure comme argument :

    SDL_TimerID Timer = SDL_AddTimer(30, bougerballe, &pos);


    et la fonction bougerballe est :

    Uint32 bougerballe(Uint32 intervalle, void *parametre) {
        SDL_Rect* pos = parametre;
            pos.balle.x++;

        return intervalle;
    }


    Le problème :
    Comment on fait comment pour acceder pos.balle.x ?
    pos.balle.x
    pos.balle->x
    pos->balle.x
    pos->balle->x
    (*(*pos).balle).x
    (*(*(*pos).balle).x) ( :p )


    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2006 à 14:41:14

      pos->balle.x
      (je te signale qu'il faut créer une instance de cette structure avant de la passer en paramètre... peut être l'a tu fait mais dans le cas contraire cela ne marchera pas)
      • Partager sur Facebook
      • Partager sur Twitter
        27 juillet 2006 à 14:54:00

        Citation : kidpaddle2

        pos->balle.x

        (je te signale qu'il faut créer une instance de cette structure avant de la passer en paramètre... peut être l'a tu fait mais dans le cas contraire cela ne marchera pas)



        Merci de ta réponse.

        Les instance de structure, c'est avec union? (au lieu de struct)

        Si non, qu'est ce que c'est?
        • Partager sur Facebook
        • Partager sur Twitter
          27 juillet 2006 à 15:58:40

          Citation : fgh

          Les instance de structure, c'est avec union? (au lieu de struct)

          Si non, qu'est ce que c'est?


          union permet d'avoir plusieurs variables de type différents ou non au même emplacement mémoire.
          • Partager sur Facebook
          • Partager sur Twitter
            27 juillet 2006 à 16:29:53

            Et les instances de structures, c'est quoi? Comment on en crée?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              27 juillet 2006 à 16:36:28

              L'instance de structure est créee regardes mieux. Donc le problème ne vient pas de là .... peut être du fait que tu dis qu'une structure soit égale à une autre ...

              SDl_Rect *pos = parametre;

              moi j'utilise directement la varialbe passée en paramètre dans mes fonctions ...

              Duarna
              • Partager sur Facebook
              • Partager sur Twitter
                27 juillet 2006 à 20:59:46

                Non quand je dis créer une instance (qui veut dire créer un objet de ce type), c'est si on a créé pos avant de le passer en paramètres au timer. Je ne parle pas de celle déclarée dans la fonction callback.
                • Partager sur Facebook
                • Partager sur Twitter
                  27 juillet 2006 à 21:46:09

                  Citation : Duarna

                  L'instance de structure est créee regardes mieux.


                  En fait, j'ai jamais rencontrer l'expression "instance de structure", c'est quoi exactement?

                  Citation : Duarna

                  Donc le problème ne vient pas de là .... peut être du fait que tu dis qu'une structure soit égale à une autre ...

                  SDl_Rect *pos = parametre;

                  Merci, en fait le problème c'était ça :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juillet 2006 à 22:27:21

                    Je n'avais pas regardé cela. En fait tu dois faire un transtypage de "parametre" vu que c'est un void*. Ainsi, tu dois faire
                    SDL_RECT pos = (SDL_RECT)parametre;

                    J'ai peut être appris "instance" en voyant la couche objet ... peut être que ce terme est spécifique aux objets en C++ mais bon c'est assez proche et plus rapide à écrire :p
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 juillet 2006 à 15:02:53

                      ok, merci. :D

                      Je met en réglé.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        28 juillet 2006 à 15:37:00

                        En fait quand tu fait une déclaration d'un objet en C++ et que tu crée un objet à l'image de la déclaration ça fait une instance, non ?
                        Les structures je sais pas si ça se dit mais ça ressemble.

                        Duarna
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 juillet 2006 à 15:43:41

                          En fait les structures sont des objets aussi. En C++ elles ont exactement la même utilisation que les classes à ceci près que les structures encapsulent les variables et méthodes en tant que "public:" alors que les classes font de même avec "private:".

                          Quand on déclare en C++ une variable du type définissant un objet, on obtient une instance. Du moins il me semble.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [SDL]Timer, structure, et callback

                          × 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