SFML 不绘制多个圆

SFML not drawing multiple Circles

我正在尝试使用 SFML 在 C++ 中编写 Tic Tac Toe 程序。一旦单击鼠标左键,我已将其编程为绘制一个圆圈。然后,当我再次单击时,它会在另一个位置重新绘制该圆圈,而不是绘制另一个圆圈。我想让它在不同的地方再画一个圆。

我在名为 CreateO:

的函数中使用 sf::CircleShape SFML 数据类型绘制圆
sf::CircleShape CreateO(float x_pos, float y_pos)
{
  // Radius: 50px                                                                                                                                                                                                   
  sf::CircleShape o(50);
  o.setFillColor(sf::Color::Black);
  o.setOutlineThickness(1);
  o.setOutlineColor(sf::Color::White);
  o.setPosition(x_pos, y_pos);
  return o;
}

在主函数中:

  sf::RenderWindow window(sf::VideoMode(900, 900), "Tic Tac Toe");
  sf::Event event;
  bool draw_o;
  float x_pos, y_pos;
  while (window.isOpen())
    {
      while (window.pollEvent(event))
    {
      switch (event.type)
        {
        case sf::Event::Closed: window.close(); break;
        case sf::Event::MouseButtonPressed:
              switch (event.mouseButton.button)
                {
                case sf::Mouse::Right:
                  draw_x = true;
                  draw_o = false;
                  x_pos  = event.mouseButton.x;
                  y_pos  = event.mouseButton.y;
                  break;
                default: break;
                }
              break;
            default: break;
            }
        }
      window.clear();
      if (draw_o) window.draw(CreateO(x_pos, y_pos)); // Called here.
      window.display();
    }

分析你的那部分代码:

window.clear();
if (draw_o) window.draw(CreateO(x_pos, y_pos)); // Called here.
window.display();

它清除了整个 window 并绘制了函数给出的一个圆。

你在游戏循环中只画了一个圆圈。要有多个圆圈,我建议创建一个圆圈矢量,例如:

std::vector<sf::CircleShape> circles;

相比 window.draw 部分,您需要使用 for 循环绘制整个向量。

如果 draw_o 为真,您的 CreateO 函数可以向向量添加一个圆。