Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: ConvexShape Problem  (Lu 1917 fois)

0 Membres et 1 Invité sur ce sujet

yovano_c

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
    • E-mail
ConvexShape Problem
« le: Octobre 16, 2016, 07:34:25 pm »
Bonjour,

J'ai ma classe Entité comme suit :

#ifndef Entity_hpp
#define Entity_hpp

#include <vector>
#include <cmath>
#include <iostream>
#include <SFML/Graphics.hpp>

class Entity
{
public:
    Entity(int width, int height);
   
    void update();
   
    void setDimension(int width, int height);
    void setDimension(sf::Vector2i dim);
    const sf::Vector2i getDimension() { return sf::Vector2i(mSpriteWidth, mSpriteHeight); };
   
    sf::Sprite getSprite() { return mSprite; };
    sf::ConvexShape getConvex() { return mConvex; };
   
    void setPosition(sf::Vector2f position) { mPosition = position; };
    sf::Vector2f getPosition() { return mPosition; };
   
private:
    sf::Sprite mSprite;
    sf::ConvexShape mConvex;
    int mSpriteWidth = 50;
    int mSpriteHeight = 50;
    sf::Vector2f mPosition;
};

#endif /* Entity_hpp */
 

Mon problème est le suivant :

Si, dans une classe qui hérite de celle là, comme PlayerTile, IsoTile, ou quelque chose du genre, c'est une classe relativement abstraite "Entity", je recupère mon mConvex, ou mSprite, avec mon getConvex() ou getSprite() ça ne me dessinnera rien, en revanche, si je passe la variable en protected au lieu de private et que je l'utilise telle quelle tout fonctionne mais je ne comprend pas pourquoi, pourrais-t-on m'expliquer?

Merci

brunnerant

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
    • E-mail
Re : ConvexShape Problem
« Réponse #1 le: Octobre 18, 2016, 04:07:12 pm »
Il faut que tu révise tes portées :
  • Les attributs de portée public sont accessible depuis l'extérieur de la classe
  • Les attributs de portée private ne sont pas accessible depuis l'extérieur de la classe
  • Les attributs de portée protected ne sont pas accessible depuis l'extérieur de la classe, sauf si c'est une classe fille
Donc, dans ton cas, c'est parfaitement normal qu'en déclarant mSprite et mConvex comme attributs private tu ne puisse pas y accéder depuis une classe dérivée. Il faut donc les mettre protected.

yovano_c

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
    • E-mail
Re : ConvexShape Problem
« Réponse #2 le: Octobre 19, 2016, 12:19:48 pm »
J'ai résolu le problème. Je connais très bien mes portées de variables. C'est juste qu'il faut passer la référence au GetConvex() et GetSprite(), qui deviennent donc:

sf::Sprite& getSprite() { return mSprite; };
    sf::ConvexShape& getConvex() { return mConvex; };

brunnerant

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
    • E-mail
Re : ConvexShape Problem
« Réponse #3 le: Octobre 21, 2016, 05:23:35 pm »
Si tu retournes ton sf::Sprite et ton sf::Convex par référence, cela veut dire que si l'utilisateur les modifie après coup, cela modifiera les attributs mSrite et mConvex qui sont dans ta classe. Attention à ça, si c'est ce que tu veux c'est très bien, mais dans le cas contraire, je te conseille d'y réfléchir !