【发布时间】:2016-03-31 06:04:02
【问题描述】:
我最近开始使用 SFML,我决定作为学习经验,我会使用它制作一个 pong 克隆。我已经定义了一个名为Ball 的类,它使用SFML 来绘制RectangleShape。但是,当我尝试使用 window.draw() 函数将这种自定义类型绘制到屏幕上时,我收到错误,因为 Ball 不是 sf::Drawable。作为 SFML 的新手,我将不胜感激。
【问题讨论】:
我最近开始使用 SFML,我决定作为学习经验,我会使用它制作一个 pong 克隆。我已经定义了一个名为Ball 的类,它使用SFML 来绘制RectangleShape。但是,当我尝试使用 window.draw() 函数将这种自定义类型绘制到屏幕上时,我收到错误,因为 Ball 不是 sf::Drawable。作为 SFML 的新手,我将不胜感激。
【问题讨论】:
要使用window.draw(object)对象的类必须继承drawable interface并实现抽象sf::Drawable::draw函数。
听起来 sf::RectangleShape 是 Ball 的成员。 SFML 知道如何渲染形状,但不知道 Ball 本身。 Ball 的类声明应如下所示:
class Ball : public sf::Drawable //,...
{
//...
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
//...
};
而draw应该是这样实现的:
void Ball::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
//assuming m_shape is the sf::RectangleShape
target.draw(m_shape, states);
}
【讨论】: