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

Auteur Sujet: Passage de sf::Texture  (Lu 2064 fois)

0 Membres et 1 Invité sur ce sujet

Xyliaris

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
Passage de sf::Texture
« le: Janvier 10, 2017, 05:04:04 pm »
Bonjour, je souhaiteras charger une texture via un manager puis donner l'adresse de cette texture au boutons que va gérer mon manager aussi. Le problème c'est que je ne vois pas du tout comment faire !
J'ai déjà fait ça
class Button : public sf::Drawable, public sf::Transformable
{

public:

    Button( sf::Texture *texture ) : b_array(sf::Points, 4)
    {
        b_texture = texture;
        unsigned int x{texture->getSize().x};
        unsigned int y{texture->getSize().y};

        b_array[0].position = sf::Vector2f(0,0);
        b_array[1].position = sf::Vector2f(x,0);
        b_array[2].position = sf::Vector2f(x,y);
        b_array[3].position = sf::Vector2f(0,y);

        b_array[0].texCoords = sf::Vector2f(0,0);
        b_array[1].texCoords = sf::Vector2f(x,0);
        b_array[2].texCoords = sf::Vector2f(x,y);
        b_array[3].texCoords = sf::Vector2f(0,y);
    }

private:

    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        states.transform *= getTransform();
        states.texture = &b_texture;
        target.draw(b_array, states);
    }

    sf::Texture *b_texture;
    sf::VertexArray b_array;

};

int main()
{

    sf::Texture t;
    if(!t.loadFromFile("C:/Test/f.png"))
        std::cout << "Erreur";

    Button b(&t);

    sf::RenderWindow window;
    window.create(sf::VideoMode(640,480), "Test", sf::Style::Default);

    while(window.isOpen())
    {
        window.clear();
        window.draw(b);
        window.display();
    }

   return 0;
}
 

Mais j'obtiens l'erreur suivante :

In member function 'virtual void Button::draw(sf::RenderTarget&, sf::RenderStates) const':|
error: cannot convert 'sf::Texture* const*' to 'const sf::Texture*' in assignment|

 

J'ai du mal à comprendre l'erreur mais je pense bien qu'il ne faut pas faire &b_texture. Pouvez vous m'aider svp ?

Xyliaris

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
Re : Passage de sf::Texture
« Réponse #1 le: Janvier 10, 2017, 05:05:58 pm »
Et donc j'ai aussi essayer ce qui me paraissais le plus logique en faisant &*b_texture, mais rien ne s'affiche

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Passage de sf::Texture
« Réponse #2 le: Janvier 10, 2017, 05:15:28 pm »
En effet, &b_texture est un sf::Texture**, il y a une étoile en trop. Pas la peine de prendre l'adresse puisque c'est déjà un pointeur.

Ensuite ton type de primitive (sf::Points) me semble peu approprié pour afficher un rectangle... ;)
Laurent Gomila - SFML developer

Xyliaris

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
Re : Passage de sf::Texture
« Réponse #3 le: Janvier 10, 2017, 07:36:14 pm »
Après relecture de mon code j'ai compris que il suffisait de mettre b_texture tout court, mais je n'avais pas remarqué le sf::Points au lieu de sf::Quads x). Je te remercie :)