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
函数可以向向量添加一个圆。
我正在尝试使用 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
函数可以向向量添加一个圆。