Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Xyliaris le Janvier 10, 2017, 05:04:04 pm

Titre: Passage de sf::Texture
Posté par: Xyliaris 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 ?
Titre: Re : Passage de sf::Texture
Posté par: Xyliaris 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
Titre: Re : Passage de sf::Texture
Posté par: Laurent 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... ;)
Titre: Re : Passage de sf::Texture
Posté par: Xyliaris 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 :)