如何删除 SFML 中的对象
How to delete an object in SFML
当我在程序中输入数字“1”时,我试图删除一个正方形。我怎样才能删除它?
sf::RectangleShape rec1(sf::Vector2f(50, 100));
rec1.setPosition(200, 700 );
rec1.setFillColor(sf::Color(100, 250, 50));
window.draw(rec1);
int num;
cout << "Please enter a number: ";
cin >> num;
创建后不能删除。您可以使用 sf::Color::Transparent
将其着色为透明,这样它将变得不可见。
如果你想删除它。你必须先把它变成一个指针。或者将其包装在处理它的 class 中。
auto rect = make_unique<sf::Rectangle>(sf::Vector2f(50, 100));
然后使用std::unique_ptr::reset()删除它。
rect.reset();
SFML 本身不会跟踪屏幕上绘制的内容 – 您必须自己完成 – 并且您应该在需要时重绘 window 内容。
基于 SFML 的程序的基本 "main loop" 通常如下所示:
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
// Handle events here
}
// Update your program logic here
window.clear();
// Draw your stuff here
window.display();
}
根据您绘制的内容,您可以确定屏幕上的可见内容。因此,如果您希望您的矩形不再出现,只需不再调用 window.draw(rectangle);
。你如何实现这一点——例如通过从 std::vector<sf::Drawable*>
中删除在绘图时迭代的矩形 – 由您决定。
当我在程序中输入数字“1”时,我试图删除一个正方形。我怎样才能删除它?
sf::RectangleShape rec1(sf::Vector2f(50, 100));
rec1.setPosition(200, 700 );
rec1.setFillColor(sf::Color(100, 250, 50));
window.draw(rec1);
int num;
cout << "Please enter a number: ";
cin >> num;
创建后不能删除。您可以使用 sf::Color::Transparent
将其着色为透明,这样它将变得不可见。
如果你想删除它。你必须先把它变成一个指针。或者将其包装在处理它的 class 中。
auto rect = make_unique<sf::Rectangle>(sf::Vector2f(50, 100));
然后使用std::unique_ptr::reset()删除它。
rect.reset();
SFML 本身不会跟踪屏幕上绘制的内容 – 您必须自己完成 – 并且您应该在需要时重绘 window 内容。
基于 SFML 的程序的基本 "main loop" 通常如下所示:
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
// Handle events here
}
// Update your program logic here
window.clear();
// Draw your stuff here
window.display();
}
根据您绘制的内容,您可以确定屏幕上的可见内容。因此,如果您希望您的矩形不再出现,只需不再调用 window.draw(rectangle);
。你如何实现这一点——例如通过从 std::vector<sf::Drawable*>
中删除在绘图时迭代的矩形 – 由您决定。