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++;
}
}
Die Kacheln werden nicht gerendert. Ich bin nicht sicher, ob das Problem, oder ob ich hier etwas falsch mit der Erbschaft macht und ob ich die m_tile haben sollte und das macht Sinn ..Kacheln, die nicht in SFML gerendert werden, obwohl sie im Grunde eine verkleidete Rechteckklasse darstellen
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Ich denke, Sie profitieren von der Vererbung 'Tile' von' sf :: RectangleShape', so dass Sie Funktionen wie 'setFillColor()' erben und Sie keine 'getRect()' Funktion benötigen. Auf diese Weise können Sie sich einfach auf Hilfsfunktionen für das Setzen/Abrufen von Hervorhebungszuständen konzentrieren: 'class Tile: public sf :: RectangleShape {};' – Galik
großartige Idee galik thanks, ich habe das Tiling-Rendering ursprünglich repariert, aber das hat das Problem tatsächlich zurückgeholt. Soll ich noch in der Fliesenklasse sf :: RectangleShape m_tile haben? Ich bin mir nicht sicher, warum es die Fliesen nicht mehr macht .... –
Durch das Erben von 'sf :: RectangleShape' wird Ihre 'Tile' ** ** a' sf :: RectangleShape', behandelt wie eins. Sie sollten also auch keine separate Form mit 'm_tile' enthalten. – Galik