Mousemove Message
-
Hallo.
Ich versuche grad meine erste Erfahrung mit 3D-Spielen zu machen.
Hab jetzt eine kleine Welt erstellt und kann mich mit den Pfeiltasten bereits umsehen und bewegen. Jetzt will ich das umsehen mit der Maus machen. Dazu muss ich nur 2 Variablen yrot und lookupdown ändern, weiß aber nicht genau wie ich das am besten anstellen soll. Meine erste Idee:case WM_MOUSEMOVE: if(LOWORD(lParam)>320) yrot-=1.0f; if(LOWORD(lParam)<320) yrot+=1.0f; if(HIWORD(lParam)>240) lookupdown+=1.0f; if(HIWORD(lParam)<240) lookupdown-=1.0f; SetCursorPos(320,240); return 0;Dies geht aber irgendwie nicht, weil ich mich dann gar nicht mehr umsehen kann, mich aber auch nicht mehr bewegen kann.
Ohne die SetCursorPos-Funktion geht es zwar, aber wenn man z.B. die Maus 100 Pixel nach links bewegt und dann nach rechts schauen will, muss diese ja erst wieder die 320Pixel-Marke überschreiten damit das geht.
Darum meine Idee den Cursor immer wieder in die Mitte des Fensters zu setzen.Hat jemand eine Idee, warum das so nicht geht oder noch besser - wie es anders geht?
Schonmal vielen Dank im Vorraus.
Grüße
Max
-
Nunja, du ich würde deine variablen nicht immer um 1 erhöhen, sondern entsprechend der maus ändern, also zum beispiel mouseY * 0*1 oder was auch immer also du immer dynamisch auf maus input reagierst, aber mal ein kleiner tip, wenn du 3D machst kommst du meiner meinung nach nicht an NeHe Tutorials vorbei
egal ob Direct X oder OpenGl, da sind viele Tuts wo auch auf Mausinput eingegangen sind das wird dir garantiert helfen die deutsche äquivalente heißt codeworx die haben die Tuts von Nehe übersetzt (zumindest ein paar davon)Gruß Chris
-
^^ die NeHe-Tutorials sind ja die Sachen, mit denen ich das grad lerne.
Das Kapitel was ich zur Zeit bearbeite dreht die Person mit den Pfeiltasten und da wollte ichs mit der WinAPI selber probieren gleich mit der Maus zu machen.Ich hab jetzt auch eine Lösung gefunden, wie das sehr schön aussieht.
Ich poste es einfach mal:case WM_MOUSEMOVE: if(LOWORD(lParam)>320) { heading+=(320-LOWORD(lParam))/5.0f; yrot=heading; SetCursorPos(320,240); } if(LOWORD(lParam)<320) { heading-=(LOWORD(lParam)-320.0f)/5.0f; yrot=heading; SetCursorPos(320,240); } if(HIWORD(lParam)>240) { if(lookupdown<90.0f) lookupdown+=(HIWORD(lParam)-240)/5.0f; SetCursorPos(320,240); } if(HIWORD(lParam)<240) { if(lookupdown>-90.0f) lookupdown+=(HIWORD(lParam)-240)/5.0f; SetCursorPos(320,240); } DrawGLScene();So wird auch berücksichtigt, dass sich die Maus auch mal um 2 oder mehr Pixel auf einmal nach links bewegt hat, was ja bei meiner anderen Version nicht der Fall war.
Danke für deine Infos.
Grüße
Max