2016-07-28 16 views
0
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

+0

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

+0

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 .... –

+0

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

Antwort

0

Sie versuchen Tile Objekt zu zeichnen (I nehmen Sie an, wie Sie uns Code gezeigt haben, der zeichnet). Aber Sie bestimmen nie seine Dimensionen, deshalb können Sie es nicht sehen. Sie legen Bemaßungen für die Elementvariable (m_tile(sf::Vector2f(squareDim, squareDim))) fest, die nicht verwendet wird, wenn Sie Kacheln wie diese zeichnen: window.draw(tile).

Sie müssen wählen: Erben Sie entweder öffentlich von RectangleShape oder enthalten Sie Member-Objekt RectangleShape, nicht beide.