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

Sprite doesn't appear on the screen when states are passed by reference

这段代码工作正常

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;

那么精灵将不会出现在屏幕上。

为什么?

正如@Stephan 在评论中指出的那样,问题的出现是因为您只在一个派生的 class 中更改了 drawCurrent 的函数签名。这使得更改的 ASpriteNode::drawCurrent 成为 ASceneNode::drawCurrent 虚函数的 重载 ,但它不会 override ASceneNode::drawCurrent 了。所以当ASceneNode::drawCurrent被调用时,ASpriteNode::drawCurrent就不再被调用了。

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

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;
    ....
};