Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pointeur et conditions

    9 janvier 2021 à 22:56:34

    Bonjour tout le monde,

    Souhaitant concevoir un petit jeu vidéo en C++, j'utilise des classes pour séparer les différentes parties de mon jeu.

    Le code suivant (hors classe):

    if(up==1)
    {
        if(Personnage.y==(850/2 - Personnage.h/2) // Centre en y
        {
            y_tilemap-=1; // Permet de se déplacer vers le haut de l'écran
            for(int i=0;i<51;i++)
            {
                for(int j=0;j<51;j++)
                {                                                  // COL est un tableau contenant les collisions
                    if(Personnage.x<COL[i][j].x+COL[i][j].w && 
                       Personnage.x+Personnage.w>COL[i][j].x && 
                       Personnage.y<COL[i][j].y+COL[i][j].h && 
                       Personnage.y+Personnage.h>COL[i][j].y)
                    {
                        y_tilemap+=1; // Génère la collision si le personnage entre en contact avec un mur ou un obstacle
                    }
                }
            }
        }
    }


    Permet à mon personnage de se déplacer et d'avoir des collisions avec des murs/obstacles lors d'un scrolling de tilemap.

    J'utilise la même logique pour me déplacer en bas, à droite et à gauche.

    Maintenant avec une classe:

    if(*cible.m_up==1)
    {
        if(*cible.m_position_y==850/2-50/2)
        {
            *cible.m_y_scroll=*cible.m_y_scroll-1;
            CollisionYScroll(cible,COLLISION,1);
        }
    }


    Ce code donne le même résultat mais en utilisant des pointeurs.

    C'est là que les problèmes commencent:

    - Sans utiliser de classes, avec la même logique, le personnage peut entrer en contact avec un mur vers le haut, puis redescendre normalement vers le bas ou simplement aller vers la droite ou la gauche sans jamais avoir de soucis.

    - Avec une classe pour gérer les déplacements et les collisions du personnage, ce dernier peut se déplacer vers toutes les directions, mais lorsqu'il entre - par exemple - en contact avec un mur en haut (pendant le scrolling, hors scrolling, il n'y a pas de problème), je ne peux plus aller ni en bas, ni à droite, ni à gauche.

    Pour résumer, mon personnage reste bloqué dans un obstacle avec une classe utilisant des pointeurs, mais ne l'est pas sans utiliser des classes mais des boucles conditionnelles avec des entiers.

    Comment expliquer cette différence ?

    Les problèmes :

    - Si je n'utilise pas les pointeurs, le personnage ne se déplacera que d'un seul pixel, puis ne bougera plus.

    - Utiliser des static int est plutôt risqué.

    Comment puis-je résoudre ce problème ?

    Merci d'avance.

    EDIT : Non, finalement je laisse tomber, il faut croire qu'on ne peut pas être bon à tout.

    -
    Edité par ReunanBeauvois 10 janvier 2021 à 3:36:00

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2021 à 9:55:07

      Bonjour Reunan,

      J'ai relu 2 fois ton post, j'avoue que je n'ai pas bien compris (Moi aussi je ne suis pas bon à tout !). Je me permets un conseil, et une suggestion :

      • Quand tu veux de l'aide sur un problème donné de ton code, affiche du code le plus simple possible qui reproduit l'erreur : tes codes sont un peu complexe, obscure, et certainement pas du même niveau pour la comparaison que tu nous demandes (2 boucles imbriquées avec 4 conditions <--> rien (?)  )
      • Comme semble le dire ta fin de message, si réellement tu "laisses tomber", donc que tu n'as plus besoin d'aide, je te suggère de mettre le sujet en résolue, que d'autre couillons de mon genre ne passe pas du temps à essayer de comprendre pour t'aider.

      Cordialement.

      -
      Edité par Dedeun 10 janvier 2021 à 9:55:55

      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2021 à 10:05:20

        Bonjour, ton code ressemble plus à du C qu'a du C++, si tu pars comme ça, autant faire du C, tu remplaces tes classes par des structures, du coup tu n'auras plus à te soucier de la visibilité des attributs.

        • Partager sur Facebook
        • Partager sur Twitter

        Pointeur et conditions

        × 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