Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme accesseur

    29 février 2008 à 23:09:41

    bonsoir
    voila mon probleme j'ai créé un accesseur sur ma class camera et je voudrai recuperer _angleZ dans ma class personnage mais le probleme c'est que ca me renvoie ZERO

    1. #include "personnage.h"
    2. #include "camera.h"
    3. #include "scene.h"
    4. #include "texture.h"
    5. #include "constante.h"
    6. #include <GL/glu.h>
    7. Camera::Camera()
    8. {
    9.     _hold = false;
    10.     _angleY = 30;
    11.     _angleZ = 0;
    12.     _distance = 500;
    13.     _motionSensivity = 0.3;
    14.     _scrollSensivity = 3;
    15. }
    16. void Camera::OnMouseMotion(const SDL_MouseMotionEvent & event)
    17. {
    18.     if (_hold)
    19.     {
    20.         _angleZ += event.xrel*_motionSensivity;
    21.         _angleY += event.yrel*_motionSensivity;
    22.         if(_angleY<=20)
    23.         _angleY=20;
    24.         if(_angleY>=70)
    25.         _angleY=70;
    26.     }
    27. }
    28. void Camera::OnMouseButton(const SDL_MouseButtonEvent & event)
    29. {
    30.     if (event.button == SDL_BUTTON_LEFT)
    31.     {
    32.         if ((_hold)&&(event.type == SDL_MOUSEBUTTONUP))
    33.         {
    34.             _hold = false;
    35.         }
    36.         else if ((!_hold)&&(event.type == SDL_MOUSEBUTTONDOWN))
    37.         {
    38.             _hold = true;
    39.         }
    40.     }
    41.     else if ((event.button == SDL_BUTTON_WHEELUP)&&(event.type == SDL_MOUSEBUTTONDOWN))
    42.     {
    43.         _distance += _scrollSensivity;
    44.         if (_distance >= 500)
    45.         _distance = 500;
    46.     }
    47.     else if ((event.button == SDL_BUTTON_WHEELDOWN)&&(event.type == SDL_MOUSEBUTTONDOWN))
    48.     {
    49.         _distance -= _scrollSensivity;
    50.         if (_distance <= 30)
    51.         _distance = 30;
    52.     }
    53. }
    54. void Camera::DrawGL(Camera *camera, Personnage &p1)
    55. {
    56.     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    57.     glMatrixMode( GL_MODELVIEW );
    58.     glLoadIdentity( );
    59.     camera->look();
    60.     p1.mon_personnage(NUL);
    61.     dessinerScene();
    62.     glFlush();
    63.     SDL_GL_SwapBuffers();
    64. }
    65. void Camera::look()
    66. {
    67.     gluLookAt(_distance,0,0,
    68.               0,0,0,
    69.               0,0,1);
    70.     glRotated(_angleY,0,1,0);
    71.     glRotated(_angleZ,0,0,1);
    72. }
    73. double Camera::getangleZ() const// mon accesseur
    74. {
    75.     return _angleZ;
    76. }


    1. #ifndef CAMERA_H
    2. #define CAMERA_H
    3. #include <SDL/SDL.h>
    4. class Personnage;
    5. class Camera
    6. {
    7. public:
    8.     Camera();
    9.     void OnMouseMotion(const SDL_MouseMotionEvent & event);
    10.     void OnMouseButton(const SDL_MouseButtonEvent & event);
    11.     void DrawGL(Camera *camera, Personnage &p1);
    12.     void look();
    13.     double getangleZ() const;
    14. private:
    15.     double _motionSensivity;
    16.         double _scrollSensivity;
    17.     double _distance;
    18.     double _angleY;
    19.     double _angleZ;
    20.     bool _hold;
    21. };
    22. #endif



    1. #include "texture.h"
    2. #include "personnage.h"
    3. #include "constante.h"
    4. #include <GL/gl.h>
    5. #include <GL/glu.h>
    6. using namespace std;
    7. Personnage::Personnage()
    8. {
    9.     _vie=100;
    10.     _buste="apprenti";
    11.     _arme="arme d'apprenti";
    12.     textures[0]=0;
    13. }
    14. void Personnage::texture_perso()
    15. {
    16.     textures[0] = loadTexture("sol1.jpg");
    17. }
    18. void Personnage::mon_personnage(int direction)
    19. {
    20.     /*GLUquadric* params;
    21.     params = gluNewQuadric();
    22.     gluQuadricTexture(params,GL_TRUE);*/
    23.     //glBindTexture(GL_TEXTURE_2D, texture[0]);
    24.     static double posx=0;
    25.     static double posy=0;
    26.     if(direction==HAUT)
    27.     posx+=AVANCE;
    28.     if(direction==BAS)
    29.     posx-=AVANCE;
    30.     if(direction==GAUCHE)
    31.     posy+=AVANCE;
    32.     if(direction==DROITE)
    33.     posy-=AVANCE;
    34.     glPushMatrix();
    35.     glRotated(_camera.getangleZ(),0,0,1);// voila la ligne ou je voudrai retrouver mon _angleZ
    36.     if(direction==NUL)
    37.     glTranslated(posx,posy,0);
    38.     if(direction==BAS)
    39.     glTranslated(-AVANCE,0,0);
    40.     if(direction==HAUT)
    41.     glTranslated(AVANCE,0,0);
    42.     if(direction==GAUCHE)
    43.     glTranslated(0,AVANCE,0);
    44.     if(direction==DROITE)
    45.     glTranslated(0,-AVANCE,0);
    46.     fprintf(stderr,"%lf\n",_camera.getangleZ());
    47.     glBindTexture(GL_TEXTURE_2D, textures[0]);
    48.     for (int i = 0; i < 4; i++)
    49.     {
    50.         glBegin(GL_QUADS);
    51.         glTexCoord2d(0,1);
    52.         glVertex3d(20,20,0);
    53.         glTexCoord2d(0,0);
    54.         glVertex3d(20,20,20);
    55.         glTexCoord2d(1,0);
    56.         glVertex3d(-20,20,20);
    57.         glTexCoord2d(1,1);
    58.         glVertex3d(-20,20,0);
    59.         glEnd();
    60.         glRotated(90,0,0,1);
    61.     }
    62.     //puis le dessus (pas besoin du dessous grâce au sol)
    63.     glBegin(GL_QUADS);
    64.     glTexCoord2d(0,0);
    65.     glVertex3d(20,-20,20);
    66.     glTexCoord2d(1,0);
    67.     glVertex3d(20,20,20);
    68.     glTexCoord2d(1,1);
    69.     glVertex3d(-20,20,20);
    70.     glTexCoord2d(0,1);
    71.     glVertex3d(-20,-20,20);
    72.     glEnd();
    73.     glPopMatrix();
    74. }


    • Partager sur Facebook
    • Partager sur Twitter
      29 février 2008 à 23:24:39

      Dans les normes standars du c++ on n'a pas le droit de commencer par un underscore (_) peut être un comflit de nom avec la librarie de open GL? je dis peux être une bétise par raport au conflit mais pas aux standars.
      http://predef.sourceforge.net
      • Partager sur Facebook
      • Partager sur Twitter
      :)
        1 mars 2008 à 15:00:34

        il est normal que ta occesseur te renvoie 0 puisque tu initialise angleZ a 0 dans ta classe caméra ...
        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2008 à 21:27:34

          darkpoujoul tu as raison des que je change ma valeur d'initialisation mon accesseur prend cette nouvelle valeur mais comment je peux avoir une valeur qui change car mon angleZ change quand je tourne ma camera mais sa ne change pas la valeur au niveau de mon accesseur
          de plus si je n'initialise pas angleZ mon personnage disparait de la scene
          • Partager sur Facebook
          • Partager sur Twitter
            2 mars 2008 à 21:49:03

            es-tu sur que dans ton main ton angleZ change ???
            • Partager sur Facebook
            • Partager sur Twitter
              2 mars 2008 à 22:05:29

              oui mon angleZ change mais pas dans le main il change dans une des méthode de la class camera ligne 26 de la premiere class que j'affiche sur mon premier post.
              • Partager sur Facebook
              • Partager sur Twitter
                3 mars 2008 à 11:57:26

                oui mais appel tu cette méthode quelque part dans ton programme ???
                • Partager sur Facebook
                • Partager sur Twitter
                  3 mars 2008 à 12:00:21

                  double GetAngleZ{return AngleZ;}, ca c'est OK

                  Tu ne doit pas oublier de mettre dans toutes tes fonctions qui modifient la caméra:
                  AngleZ = nouvelle Valeur de l'angle.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 mars 2008 à 15:42:02

                    Est-ce vraiment _camera qui recoit les mouvement de la souri... Es-tu certain que ce n'est pas une autre instance de Camera qui fait le travail laissant la variable membre de personnage inchangée depuis sa construction?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    probleme accesseur

                    × 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