Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

15.07.2014, 22:18

SFML Maus eingabe

Hallo und guten Abend,

ich habe jetzt Ferien und wollte mich mal mit der SFML bescheftigen. Auf den ersten blick ist die sache wirklich schön einfach. Aber jetzt hänge ich leider schon fest. Ich suche eine möglichkeit wie ich am besten die größe eines Sprites als Int-Wert bekomme.
Ich möchte damit eine Click-Controlle eines buttons bauen, wenn es also besser Ideen gibt immer her damit. Ich würder mich sehr über eine Antwort freuen.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

2

15.07.2014, 22:33

Ich setze jetzt einfach mal voraus, dass du in der Lage bist, mit der SFML umzugehen oder zumindest in die Doku zu gucken.
Von der Logik her ist das simpel:

Du hast die X Koordinate(standardmäßig der "linke Rand" des Sprits), wenn du dazu die Breite addierst erhältst du den Wert auf der rechten Seite.
Die Y Koordinate ist oben, die Y Koordinate + Höhe ist der untere Rand. Nun musst du nur noch auf einen Klick warten und überprüfen, ob der Klick innerhalb dieser Limits, die eine Box ergeben, war. Und fertig ist die Kiste. :)

Du könntest jetzt für jedes Sprite übrigens eine solche "Box" automatisch erzeugen und dir Funktionen schreiben, die das alles automatisieren sodass du nicht jedesmal ewig lange if-Abfragen schreiben musst.
WIP Website: kevinheese.de

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

3

15.07.2014, 22:37

So weit war ich auch schon. Aber entweder mach ich etwas gehörig falsch oder ich bin einfach zu blöde. Ich habe Float-Werte als größe des Sprites und Int-Werte bei der Maus.

idontknow

unregistriert

4

15.07.2014, 22:44

Maus = Pixelkoordinaten, musst halt in nen float Vector umwandeln z.b. über den Konstruktor der Vector2f Klasse.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

5

15.07.2014, 22:56

Bich ich echt zu doof dafür?
int i = 10 entspricht doch 10Pixel. float f = 10 sind doch viel mehr als 10Pixel.

Nur zu vorbeugen, ich benutze sf::Mouse::getPosition(window) und diese Funktion sprite.getScale(size.x, size.y).

Lares

1x Contest-Sieger

  • Private Nachricht senden

6

15.07.2014, 22:57

Verwendest du get


Ich setze jetzt einfach mal voraus, dass du in der Lage bist, mit der SFML umzugehen oder zumindest in die Doku zu gucken.
Von der Logik her ist das simpel:

Du hast die X Koordinate(standardmäßig der "linke Rand" des Sprits), wenn du dazu die Breite addierst erhältst du den Wert auf der rechten Seite.
Die Y Koordinate ist oben, die Y Koordinate + Höhe ist der untere Rand. Nun musst du nur noch auf einen Klick warten und überprüfen, ob der Klick innerhalb dieser Limits, die eine Box ergeben, war. Und fertig ist die Kiste. :)

Du könntest jetzt für jedes Sprite übrigens eine solche "Box" automatisch erzeugen und dir Funktionen schreiben, die das alles automatisieren sodass du nicht jedesmal ewig lange if-Abfragen schreiben musst.


SFML hat für Sprites die Methode getGlobalBounds(), man braucht sie also nicht selbst erstellen. Entsprechend kann man dann mit den zurückgegebenen Rect prüfen, ob sich der Punkt des Mausklicks innerhalb des Rects befindet und somit auf das Sprite geklickt wurde. Falls das Problem weiterhin besteht wäre Code sinnvoll.

Edit: getScale() gibt nur die Skalierung des Sprites an. Also, ob es doppelt so groß ist wie das Originalbild und in Bezug auf welche Achse.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

7

15.07.2014, 23:27

Danke Lares das war der entscheidene Tipp den ich gesucht hab. Jetzt kanns weiter gehen

8

18.07.2014, 23:01

Du musst ausserdem aufpassen, da die SFML Maus Klasse zwei unterschiedliche Funktionen mitbringt, die Position abzufragen (siehe SFML Doku).

Du möchtest wahrscheinlich die Funktion mit dem window als Parameter verwendet, da du dann auch bei Anwendungen im Fenstermodus die korrete Position innerhalb des Fensters bekommst. Mit der anderen, parameterlosen Funktion erhältst du die Position der Maus in Desktopkoordinaten.

So Far...
Laguna
Portfolio runvs.io | Gamejolt | itch.io | PEWN | Twitter

Werbeanzeige