2017-03-04 4 views
0

Ich versuche ein Quadrat zu löschen, wenn ich die Nummer als "1" in das Programm eingeben. Wie kann ich es löschen?So löschen Sie ein Objekt in SFML

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; 

Antwort

3

SFML selbst nicht verfolgen, was auf dem Bildschirm gezogen wird - was Sie tun müssen, dass sich selbst - und Sie sollen den Fensterinhalt neu zu zeichnen, wenn nötig.

A basic „Hauptschleife“ für ein Programm SFML Basis würde dies typischerweise wie folgt aussehen:

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(); 
} 

Je nachdem, was Sie zeichnen, legen Sie fest, was auf dem Bildschirm sichtbar ist. Wenn Ihr Rechteck nicht mehr angezeigt werden soll, rufen Sie einfach nicht mehr window.draw(rectangle); auf. Wie Sie dies erreichen - z.B. indem Sie das Rechteck von einer std::vector<sf::Drawable*> entfernen, die beim Zeichnen über iteriert wird - liegt ganz bei Ihnen.

1

Sie können es nicht löschen, wenn Sie es so erstellt haben. Sie können es als transparent mit sf::Color::Transparent Farbe und es wird unsichtbar werden.

Wenn Sie es löschen möchten. Sie müssen es zuerst zu einem Zeiger machen. oder wickeln Sie es aus einer Klasse, die es behandelt.

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

und dann std :: unique_ptr :: reset() verwenden, um es zu löschen.

rect.reset();