2017-02-14 4 views
0

私は簡単なクラスのセットを持っています。そのうちの1つはButtonComponentです。ここで私は本質的に視覚的な側面にsf::RectangleShapeを使用し、その後はButtonComponentの残りはイベントリスナーなどのものを処理します。この問題は、親クラスのsf::Drawableを継承すると、draw()Componentクラス)を実装する必要があります。これは、子クラスがdraw()の親を実装し、SFMLシェイプdraw()の機能を実装していないことを意味します。 2つのクラスを再構築する方法や、sf::RectangleShapes関数を呼び出す方法はありますか?sf :: RectangleShapes関数を呼び出しているのですか?

Component.h

class Component : public sf::Drawable { 
public: 
    Component(); 
    virtual ~Component(); 
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0; 
}; 

class ButtonComponent : public sf::RectangleShape, public Component { 
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states); 
}; 
+0

"2つのクラスを再構成する方法や、' sf :: RectangleShapes'描画関数を呼び出す方法はありますか?実際に 'sf :: RectangleShapes :: draw()'と呼ぶのを妨げるものは何ですか? –

+0

それはプライベート関数です... – Matthew

+0

レンダリングターゲットによってのみ呼び出されるはずだからプライベートです。 drawableを描画したい場合は、 'myRenderTarget.draw(myDrawable);'これを呼び出すと、実際にdrawableの 'draw()'メンバーが内部的に呼び出されます。 – Mario

答えて

-2

ソリューションは、あなたの子クラスのみsf::Drawableを継承し、あなたの子クラスの内部sf::RectangleShapeを持っていることです。以下のようなもの

class Component : public sf::Drawable { 
public: 
    Component(); 
    virtual ~Component(); 
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0; 
}; 

class ButtonComponent : public Component { 
public: 
    ButtonComponent(const sf::Vector2f &size = sf::Vector2f(0, 0)); 

    void draw(sf::RenderTarget& target, sf::RenderStates states) const; 

    void setSize(const sf::Vector2f& size); 
    const sf::Vector2f& getSize() const; 
    virtual unsigned int getPointCount() const; 
    virtual sf::Vector2f getPoint(unsigned int index) const; 
    void setTexture(const sf::Texture* texture, bool resetRect = false); 
    void setTextureRect(const sf::IntRect &rect); 
    void setFillColor(const sf::Color &color); 
    void setOutlineColor(const sf::Color &color); 
    void setOutlineThickness(float thickness); 
    const sf::Texture* getTexture() const; 
    const sf::IntRect& getTextureRext() const; 
    const sf::Color& getFillColor() const; 
    const sf::Color& getOutlineColor() const; 
    float getOutlineThickness() const; 
    sf::FloatRect getLocalBounds() const; 
    sf::FloatRect getGlobalBounds() const; 
    void setPosition(float x, float y); 
    void setPosition(const sf::Vector2f &position); 
    void setRotation(float angle); 
    void setScale(float factorX, float factorY); 
    void setScale(const sf::Vector2f& factors); 
    void setOrigin(float x, float y); 
    void setOrigin(const sf::Vector2f& origin); 
    const sf::Vector2f& getPosition() const; 
    float getRotation() const; 
    const sf::Vector2f& getScale() const; 
    const sf::Vector2f& getOrigin() const; 
    void move(float offsetX, float offsetY); 
    void move(const sf::Vector2f& offset); 
    void rotate(float angle); 
    void scale(float factorX, float factorY); 
    void scale(const sf::Vector2f& factor); 
    const sf::Transform& getTransform() const; 
    const sf::Transform& getInverseTransform() const; 
private: 
    sf::RectangleShape _btnShape; 
}; 
関連する問題