我想创建一个包含所有将在窗口上绘制的精灵,文本和形状的数组,我的问题是如何使该数组既可以同时使用sf :: Drawable和sf :: Transformable?
最佳答案
您需要创建一个同时继承Drawable
和Transformable
的类。然后,您将能够创建该类的数组。
class Obj : public sf::Drawable, public sf::Transformable
{
// class code
}
// somewhere in code...
std::array<Obj, ARRAY_SIZE> arr;
确保正确实现
Drawable
和Transformable
。这是官方文档的链接。
Transformable&
Drawable
实现这些类的一种方法是:
class Obj : public sf::Drawable, public sf::Transformable
{
public:
sf::Sprite sprite;
sf::Texture texture;
// implement sf::Drawable
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
target.draw(sprite, states); // draw sprite
}
// implement sf::Transformable
virtual void SetPosition(const MyVector& v) const
{
sprite.setPosition(v.x(), v.y());
}
}
然后,您可以在代码中直接绘制和转换类。
// somewhere in code
// arr = std::array<Obj, ARRAY_SIZE>
for (auto s : arr) {
window.draw(s);
}