如何删除SFML中的对象

时间:2017-03-04 17:05:24

标签: visual-c++ 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;

2 个答案:

答案 0 :(得分:3)

SFML本身不会跟踪在屏幕上绘制的内容 - 您必须自己做 - 并且您应该在需要时重新绘制窗口内容。

一个基本的&#34;主循环&#34;对于基于SFML的程序通常如下所示:

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 :(得分:1)

当你创建它时,你不能删除它。你可以使用sf::Color::Transparent将其着色为透明,它将变得不可见。

如果要删除它。你必须先把它作为指针。或者将它从处理它的类中包装出来。

auto rect = make_unique<sf::Rectangle>(sf::Vector2f(50, 100)); 

然后使用std :: unique_ptr :: reset()删除它。

rect.reset();