我想创建一个包含所有将在窗口上绘制的精灵,文本和形状的数组,我的问题是如何使该数组既可以同时使用sf :: Drawable和sf :: Transformable?

最佳答案

您需要创建一个同时继承DrawableTransformable的类。然后,您将能够创建该类的数组。

class Obj : public sf::Drawable, public sf::Transformable
{
    // class code
}

// somewhere in code...
std::array<Obj, ARRAY_SIZE> arr;


确保正确实现DrawableTransformable



这是官方文档的链接。

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

09-25 20:32