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

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

1

01.06.2016, 10:38

[Java] Klick auf Titelleiste erkennen.

Moin Moin,

ich kämpfe gerade damit, dass ich eine Libgdx-Anwendung habe, die aber leider komische Nebeneffekte erzeugt.
Wenn man anfängt das Fenster zu verschieben wird zwar das Rendern unterbrochen, aber andere Berechnungen werden fortgesetzt.

Jetzt zu meiner eigentlichen Frage, bzw. Idee:
Ich möchte nun manuell den Klick auf die Titelleiste erkennen um zu merken wann angefangen wird das Fenster zu verschieben.
Durch einen ComponentListener kann ich erkennen, dass das Fenster sich bewegt, aber nicht wann es stoppt bzw das Verschieben startet.

Kennt jemand eine Lösung bei der Klicks auf der Titelleiste erkannt und abgearbeitet werden können?

Beste Grüße,
Jar

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

01.06.2016, 11:29

Das kannst Du mit dem Ansatz nicht lösen. Das Problem ist afaik, dass während des Verschiebens keine anderen Windows-Messages an das Fenster geliefert werden, folglich auch keine WM_DRAW. Ich hatte das bei mir damals einfach so gelöst (hatte sich einfach so ergeben), dass ich die Logik über einen Timer asynchron anstoße und das Rendering direkt selbst ausführe.
SFML hat übrigens dasselbe Problem. SDL vermutlich ebenfalls.
Theoretisch kannst du das über WM_NCHITTEST und WM_ENTERSIZEMOVE erkennen. Aber ob LibGDX dir den Zugriff auf System-spezifische Messages erlaubt, wage ich zu bezweifeln.

Siehe auch: http://stackoverflow.com/a/18043461
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (01.06.2016, 11:38)


Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

3

14.06.2016, 11:11

Ganz vergessen hier zu antworten. Leider ist es wirklich nicht so einfach möglich. Zu dem Schluss bin ich auch schon vor Erstellung des Threads gekommen^^ Aber ich dachte vielleicht haben andere das Problem irgendwie lösen können.

Das eigentliche Problem ist eigentlich auch etwas spezieller.
Ich benutzte Box2D, wenn ich nun das Fenster verschiebe wird zwar das Rendern blockiert, die Box2D World Berechnungen im Hintergrund laufen aber weiter. Wenn ich das Fenster wieder loslasse kann es passieren, dass eine Box wie von Geisterhand aus dem Bildschirm katapultiert wird.

Leider wirft libdx kein Pause Event oder ähnliches beim Verschieben.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

14.06.2016, 11:32

Nun, *DAS* Problem kannst Du aber ganz einfach selbst erkennen. Du übergibst Box2D ja einen Timestep. Den würde ich einfach auf ein Maximum (sagen wir 1/20 Sekunde) beschränken und größer darf der nicht werden. Wahlweise kannst Du die vergangene Zeit in Teile fester Größe zerhacken (fixed time steps) und diese alle abarbeiten, bis du wieder bei der aktuellen Zeit angekommen bist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

5

14.06.2016, 13:31

Danke für den Vorschlag, hört sich relativ einfach an^^

Derzeit habe ich Box2D leider vollkommen entfernt und mein eigenes Zeug implementiert (irgendwann fragt man sich nur... wieso das Rad neu erfinden).

Heute Abend sollte ich Box2D wieder integriert haben und dann werde ich berichten ob es geklappt hat :)

Werbeanzeige