当状态通过引用传递时,Sprite不会出现在屏幕上

时间:2015-04-21 15:54:29

标签: c++ sfml

此代码可以正常使用

class ASpriteNode : public ASceneNode {
public:
    explicit        ASpriteNode( const sf::Texture& texture );
                    ASpriteNode( const sf::Texture& texture, const sf::IntRect& rect );

private:
    virtual void    drawCurrent( sf::RenderTarget& target, sf::RenderStates states ) const;

    sf::Sprite      sprite;
};

但如果我改行

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

然后精灵不会出现在屏幕上。

为什么?

1 个答案:

答案 0 :(得分:2)

正如@Stephan在评论中指出的那样,问题出现了,因为您只在一个派生类中更改了drawCurrent的函数签名。这会使ASpriteNode::drawCurrent虚拟函数的更改ASceneNode::drawCurrent变为重载,但不再覆盖 ASceneNode::drawCurrent。因此,当调用ASceneNode::drawCurrent时,不再调用ASpriteNode::drawCurrent

您需要将ASceneNode::drawCurrent以及从ASceneNode派生的所有类更改为新签名:

class ASceneNode {
    ....
    virtual void drawCurrent( sf::RenderTarget& target, sf::RenderStates& states ) const;
    ....
};

class ASpriteNode : public ASceneNode {
    ....
    virtual void drawCurrent( sf::RenderTarget& target, sf::RenderStates& states ) const;
    ....
};