尽管基本上是一个装扮的矩形类,但是在SFML中不渲染的瓷砖

时间:2016-07-28 09:19:20

标签: c++ sfml

class Tile : public sf::RectangleShape {

public:
    Tile(); 
    Tile(float);
    ~Tile();

    void highlightTile();
    bool isTileHighlighted() const;
    void turnOffHighlight();

private:
    sf::RectangleShape m_tile;
    bool m_isHighlighted;
};


Tile::Tile()
{
}

Tile::Tile(float squareDim) : m_tile(sf::Vector2f(squareDim, squareDim)), m_isHighlighted(false) {
}


bool Tile::isTileHighlighted() const {
    return (m_tile.getOutlineColor() == sf::Color::Yellow);
}

void Tile::turnOffHighlight(){
    m_tile.setOutlineThickness(0);
}

void Tile::highlightTile() {
    m_tile.setOutlineThickness(5);
    m_tile.setOutlineColor(sf::Color::Yellow);
}

Tile::~Tile(){
}


Grid::Grid(float squareDim) 
{
    Tile tilePiece(squareDim);
    sf::Vector2f position(0, 0);
    int counter = 0; //counter for whether the column is even or odd
    int counter1 = 0; //counter for whether we are on an even or odd row
    for (int row = 0; row < 8; row++) {
        for (int column = 0; column < 8; column++) {

            if (counter1 % 2 == 0 && counter % 2 == 0 || counter1 % 2 != 0 && counter % 2 != 0) {
                tilePiece.setFillColor(sf::Color::Red);
            }
            else {
                tilePiece.setFillColor(sf::Color::White);
            }

            tilePiece.setPosition(position);
            m_tileSet[row][column] = tilePiece; //correct coordinates
            m_gridMap[row][column] = sf::Vector2f(tilePiece.getPosition().x + squareDim / 2, tilePiece.getPosition().y + squareDim / 2);
            position.x += squareDim;
            counter++;
        }
        position.y += squareDim;
        position.x = 0;
        counter = 0;
        counter1++;
    }
}

瓷砖无法渲染。我不确定这个问题,或者我是否对这里的继承做错了,我是否应该使用m_tile,这是有道理的。

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

1 个答案:

答案 0 :(得分:0)

您正在尝试绘制Tile对象(我想是这样,因为您没有向我们展示绘制的代码)。但是你从来没有设定它的尺寸,这就是为什么你看不到它。您要做的是设置成员变量(m_tile(sf::Vector2f(squareDim, squareDim)))的维度,如果您像这样绘制Tiles,则不使用该维度:window.draw(tile)

您必须选择:从RectangleShape公开继承或包含成员对象RectangleShape,而不是两者。