当通过引用传递状态时,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;
....
};
这段代码工作正常
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;
....
};