Я пытаюсь закодировать Hex Game, используя SFML, и для этого я хочу нарисовать гексагоны, выровненные по сетке.Для этого я попытался использовать выпуклую фигуру, которая не работала, и массив вершин, который сделал то же самое.
Вот моя функция рендеринга:
void Game::render(std::vector<int>& Vector)
{
mWindow.clear(sf::Color(100, 100, 100));
drawCells(Vector);
mWindow.display();
}
А вот функция drawCells:
void Game::drawCells(std::vector<int>& Vector)
{
for (unsigned int x = 0; x < mColCount; ++x)
{
for (unsigned int y = 0; y < mRowCount; ++y)
{
sf::VertexArray hexagone(sf::Triangles, 6);
sf::Color color;
if (Vector[getIndex(x, y)] == WHITE)
{
color = sf::Color(255, 255, 255);
}
else if (Vector[getIndex(x, y)] == BLUE)
{
color = sf::Color(200, 50, 50);
}
else // Red hexagon
{
color = sf::Color(50, 50, 200);
}
hexagone[0] = sf::Vertex(sf::Vector2f((x + 1.0 / 2.0) * mCellHorSize + mHorOffset, y * mCellVerSize + mVerOffset), color);
hexagone[1] = sf::Vertex(sf::Vector2f((x + 1.0) * mCellHorSize + mHorOffset, (y + 1.0 / 3.0) * mCellVerSize + mVerOffset), color);
hexagone[2] = sf::Vertex(sf::Vector2f((x + 1.0) * mCellHorSize + mHorOffset, (y + 2.0 / 3.0) * mCellVerSize + mVerOffset), color);
hexagone[3] = sf::Vertex(sf::Vector2f((x + 1.0 / 2.0) * mCellHorSize + mHorOffset, (y + 1) * mCellVerSize + mVerOffset), color);
hexagone[4] = sf::Vertex(sf::Vector2f(x*mCellHorSize + mHorOffset, (y + 2.0 / 3.0) * mCellVerSize + mVerOffset), color);
hexagone[5] = sf::Vertex(sf::Vector2f(x*mCellHorSize + mHorOffset, (y + 1.0 / 3.0) * mCellVerSize + mVerOffset), color);
/*sf::VertexArray hexagone(6);
hexagone.setOutlineColor(sf::Color::Black);
hexagone.setOutlineThickness(4);
hexagone.setPoint(0, sf::Vector2f((x + 1.0 / 2.0)*mCellHorSize + mHorOffset, y*mCellVerSize + mVerOffset));
hexagone.setPoint(1, sf::Vector2f((x + 1.0)*mCellHorSize + mHorOffset, (y + 1.0 / 3.0)*mCellVerSize + mVerOffset));
hexagone.setPoint(2, sf::Vector2f((x + 1.0)*mCellHorSize + mHorOffset, (y + 2.0 / 3.0)*mCellVerSize + mVerOffset));
hexagone.setPoint(3, sf::Vector2f((x + 1.0 / 2.0)*mCellHorSize + mHorOffset, (y+1)*mCellVerSize + mVerOffset));
hexagone.setPoint(4, sf::Vector2f(x*mCellHorSize + mHorOffset, (y + 2.0 / 3.0)*mCellVerSize + mVerOffset));
hexagone.setPoint(5, sf::Vector2f(x*mCellHorSize + mHorOffset, (y + 1.0 / 3.0)*mCellVerSize + mVerOffset));
if (Vector[getIndex(x, y)] == WHITE)
{
hexagone.setFillColor(sf::Color(255, 255, 255));
}
else if (Vector[getIndex(x, y)] == BLUE)
{
hexagone.setFillColor(sf::Color(200, 50, 50));
}
else // Red hexagon
{
hexagone.setFillColor(sf::Color(50, 50, 200));
}*/
mWindow.draw(hexagone);
}
}
}
Я уже потратил много часов на это, и я хотел бы перейти к следующему шагу, поэтому я спрашиваю вас, ребята, знаете ли вы, почему гексагоныне рендерингЯ забыл упомянуть, но window.clear работает отлично, поэтому это должна быть функция drawCells.
PS: Если вы обнаружите ошибки на английском языке, исправьте их, так как я хочу улучшить свой английский.Спасибо.