Wie frage ich in SFML ab ob eine maus taste gedrückt ist?
-
Hi Leute,
hab da n kleines Problem.
und zwar habe ich einen grafik dargstellt.
wenn ich nun mit meiner maus auf diese grafik zeige beendet sich das programm. soweit so gut.
nun möchte ich aber noch hinzufügen das das programm nur beendet wird wenn ich auf der Grafik bin und die linke maustaste drücke.Wie stell ich das in sfml am besten an?
habe schon herum probiert aber ohne Erfolg.der codeabschnitt lautet wie folgt
if(MausX >= 510 && MausX <= 628 && MausY >= 386 && MausY <= 412)
{
if(??????????)
{
App.Close();
}
}
-
-
das war auch meine anlauf stelle aber irgendwie funzt das nicht das hatte ich bei den fragezeichen
Input.IsMouseButtonDown(sf::Mouse::Right)
-
Saibot1988 schrieb:
das war auch meine anlauf stelle aber irgendwie funzt das nicht
Was "funzt" nicht? Hast du mal überprüft, ob die Koordinaten stimmen?
-
ja habe ich
das war das erste was ich angepasst habe da musste ich die maus nur innerhalb des bereichs bewegen und das programm wurde beendet.
nun wollte ich das erweitern in dem ich sage das es erst beendet wird wenn die maus in dem bereich ist und gleichzeitig die linke maustaste gedrückt wird.
-
Dir ist klar dass "MouseMoved" und "MouseButtonPressed" unabhaengige Events sind?
-
wie meinst du jetzt?
-
Hier mal ein kurzer, kompilierbarer Beispielcode der auf dein Problem zugeschnitten ist. Vielleicht hilft er dir ja etwas:
#include <SFML/Graphics.hpp> // Gibt 'Rectangle' des Sprites zurück und achtet auf dessen gesetzten Mittelpunkt (aber nicht auf Skalierung oder Rotation) sf::FloatRect spriteRectangle(const sf::Sprite &sprite) { return sf::FloatRect(sprite.GetPosition().x - sprite.GetCenter().x, sprite.GetPosition().y - sprite.GetCenter().y, sprite.GetPosition().x + sprite.GetSize().x - sprite.GetCenter().x, sprite.GetPosition().y + sprite.GetSize().y - sprite.GetCenter().y); } int main() { // Fenster erstellen sf::RenderWindow fenster(sf::VideoMode(800, 600, 32), "Klick und zu", sf::Style::Close); fenster.SetFramerateLimit(30); // Sprite erstellen und noch eine Variable für die Mauscursorkoordinaten sf::Image bild(100, 100, sf::Color::Red); sf::Sprite klickSprite(bild, sf::Vector2f(fenster.GetWidth() / 2.f, fenster.GetHeight() / 2.f)); klickSprite.SetCenter(klickSprite.GetSize() / 2.f); sf::Vector2f mausposition(0.f, 0.f); // Hauptschleife while(fenster.IsOpened()) { sf::Event ereignis; // Ereignisschleife while(fenster.GetEvent(ereignis)) { // Schließensymbol ('X') angeklickt ODER 'Escape' gedrückt -> Fenster schließen if(ereignis.Type == sf::Event::Closed || (ereignis.Type == sf::Event::KeyPressed && ereignis.Key.Code == sf::Key::Escape)) { fenster.Close(); } // Wurde die Maus bewegt -> aktualisiere Mauscursorkoordinaten if(ereignis.Type == sf::Event::MouseMoved) { mausposition.x = static_cast<float>(ereignis.MouseMove.X); mausposition.y = static_cast<float>(ereignis.MouseMove.Y); } // Wurde die linke Maustaste gedrückt, überprüfe ob sich die Koordinaten des Mauscursors innerhalb // des 'Rectangles' (= Rechteck) des Sprites befinden. Falls ja -> Fenster schließen if(ereignis.Type == sf::Event::MouseButtonPressed && ereignis.MouseButton.Button == sf::Mouse::Left) { if(spriteRectangle(klickSprite).Contains(mausposition.x, mausposition.y)) { fenster.Close(); } } } // Zeichnen fenster.Clear(); fenster.Draw(klickSprite); fenster.Display(); } return 0; }