Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 19:20

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 10:46 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Hallo,

hab mich grad angemeldet und dies ist mein erster Beitrag in diesem Forum.
Ich arbeite schon seit langer Zeit mit Delphi, aber OpenGL kenne ich erst seit ein paar Tagen.
Dank der Tutorials habe ich auch schnell die ersten Erfolge feiern dürfen.

So kommen dann auch schnell weitere Fragen auf.
Aktuell habe ich ein Problem mit der Mausabfrage.

Ich habe eine Gameloop die ständig läuft. In dieser Gameloop frage ich die Bewegung
der Maus ab. Diese wird dann in eine Bewegung in X- und Z-Ebene umgesetzt. Also
die typische FirstPerson-Ansicht.

Jetzt das Problem: Wenn die Maus den Rand meines Formulars erreicht, stoppt die Bewegung.
D.h. ich erreiche so natürlich keine 360 Grad Drehung. Ich bin von der Größe des Fensters abhängig.
Um das zu umgehen, müsste man die Mausbewegung auch dann mitgeteilt bekommen, wenn diese Grenzen
erreicht werden.

Meine Frage: Gibt es eine WinAPI oder anderweitige Funktion mit deren Hilfe ich die Mausbewegung ständig abfragen kann.
Ich meine damit NICHT die Position, die ist mir im Grunde völlig egal.

Ich hoffe mich klar genug ausgedrückt zu haben. Ansonsten bitte nachfragen.
Ich denke, das ist ein Problem das doch schon jeder gehabt haben muss. Leider konnte ich bisher
keine geeigneten Artikel dazu im Internet finden.

Vielen Dank schon mal im voraus.

BionicWave


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 11:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die meisten Spiele lösen das dann entweder mit Mouse Grabbing oder indem sie die Mausposition immer in die Fenstermitte zurücksetzen. Ich weiß nicht, wie man ersteres realisiert, ich nutze eigentlich immer SDL, das tut das für mich ;). Aber vielleicht ist das Denk- und Rechercheanstoß genug, bis jemand mit mehr Informationen vorbeikommt ;).

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Richtig...Mauscursor wieder zurück in die Mitte beamen ist das übliche, oder zumindest ich mache das auch so ;)

Es ist ratsam den Mauscursor auszublenden, sonst flackert der nur komisch rum. Ich nutze Qt, also bei WinAPI kann ich nicht helfen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 12:27 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
In der WinAPI heißen die Befehle ShowCursor und SetCursorPos.


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:21, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 13:04 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Hey, danke für die Antworten.

Ich hatte tatsächlich ein Projekt testweise mit Mauszurücksetzen probiert, dachte aber das diese Methode etwas
an einen Holzhammer erinnert.

Gut zu wissen das andere das Problem in ähnlicher Weise angegangen sind.

SDL hab ich auch hier. Werde mir das mal ansehen.

Vielen Dank.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 18:36 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Also...

Wenn ich im Formular mit OnMouseMove arbeite und dort, nach errechnetem Delta, die Mausposition mit SetCursorPos auf
die Mitte des Fensters setze, dann bleibt das ganze Programm hängen.
Ich muss Mittels ALT+TAB auf Delphi wechseln und das Programm killen.

Wenn ich jedoch mit GetCurorPos in meiner GameLoop arbeite, dann kann ich dort SetCursorPos nutzen.
Das funkt jetzt einwandfrei. Warum an der einen und nicht an der anderen Stelle ist jetzt erst mal zweitrangig.

Danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, überleg mal, was passiert wenn du SetCursorPos im MouseMove aufrufst… Du bewegst den Cursor. Über dem Formular. Sorgt für ein MouseMove, was wiederum ein SetCursorPos aufruft ;)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: So Apr 10, 2011 21:40 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Lord Horazont hat geschrieben:
Naja, überleg mal, was passiert wenn du SetCursorPos im MouseMove aufrufst… Du bewegst den Cursor. Über dem Formular. Sorgt für ein MouseMove, was wiederum ein SetCursorPos aufruft ;)


:roll: Lol. Klar.
Danke für den Hinweis. :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mausabfrage
BeitragVerfasst: Mo Apr 11, 2011 07:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich habe das bei mir so gelöst:
Code:
  1.  
  2. void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
  3.     if (m_skipEvent) {
  4.         m_skipEvent = false;
  5.         return;
  6.     }
  7.  
  8.     // ...Mausbewegung behandeln
  9.  
  10.     m_skipEvent = true;
  11.     QCursor::setPos(mapToGlobal(QPoint(hw,hh))); // das SetCursorPos-Äquivalent in Qt
  12. }


Also einfach immer wenn SetCursorPos aufgerufen wird sorgt ein Bool-Flag dafür, dass das nächste Mausevent ignoriert wird.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]