如何使用SFML继承添加函数?

时间:2015-01-28 23:44:08

标签: c++ inheritance sfml

我正在使用c ++和SFML,但是我尝试从他们的sf :: Sprite抽象类继承时遇到了问题。由于我的空间分区的性质,每个精灵都有可能被绘制为接触到的网格单元格,这里是渲染代码

for(int i = 0; i < board.GetGrid().size(); i++){
            for(int k = 0; k < board.GetGrid()[i].GetMovableObjects().size(); k++){
                window.draw(board.GetGrid()[i].GetMovableObjects()[k]);
            }
            for(int j = 0; j < board.GetGrid()[i].GetStationaryObjects().size(); j++){
                window.draw(board.GetGrid()[i].GetStationaryObjects()[j]);
            }
        }

因此循环告诉每个单元格绘制它包含的所有对象,因此可以多次绘制一些对象(sf :: Sprites),这是我不想要的。解决方案是给每个对象一个bool drawn,这样我就可以看到是否已经绘制了一个给定的对象,如此

for(int i = 0; i < board.GetGrid().size(); i++){
            for(int k = 0; k < board.GetGrid()[i].GetMovableObjects().size(); k++){
                if(!board.GetGrid()[i].GetMovableObjects()[k].drawn){
                        //draw

问题是:std :: vectors movableObjectsstationaryObjects是sf :: Sprite对象的向量:std::vector<sf::Sprite> movableObjects, stationaryObjects; 和sf :: Sprite没有我可以使用的bool drawn;,所以我必须创建自己的派生类

#include "SFML\Graphics.hpp"

class MoveableObject : sf::Sprite{
    //this is a pure virtual function, must be implemented by inheriting classes
    virtual void draw(sf::RenderTarget &target, sf::RenderStates &states) {};
public:
    bool drawn;
};

所以我将我的向量更改为std::vector<MovableObject> movableObjects, stationaryObjects;,以便这里的对象像sprite一样,但也可以返回drawn或其他我想要添加的内容。很长的帖子,所以我会明白:我如何处理抽象类的向量?当我尝试向moveableObjects.push_back(sprite)这些向量添加项目时(sprite是一个简单的sf :: Sprite)我得到编译器错误“没有合适的用户定义转换”sf :: Sprite“到”MoveableObject“存在”

尝试继承SFML的类,所以我可以添加自己的函数让我发疯,所以我该怎么办呢?

0 个答案:

没有答案