Problem: Player looking around with mouse

Posted By: KingdaKa

Problem: Player looking around with mouse - 03/22/10 17:11

Hi everybody.

English:

Iam currently working on my player movement code for my project and i want to code most of it by myself.
Its a "Horror-Adventure" in first person view.
The player should move and strafe with the arrow keys and look around with the mouse. At the moment, overall its working quite good, but looking around with the mouse isnt working correctly yet. If I move the mouse slowly, everything works fine and smooth. But if I move the mouse fast, the player turns slowly and not smooth. For example: I move the mouse slowy for 1-2 inches, the player turns about 180deg. I move the mouse fast for 3-4 inches, the player turns just about 40deg (Problem with the sampling rate?). Toggle the mouse acceleration on/off in windows, doesnt have effect. In commercial games, everything is working fine for me with this mouse, so this shouldnt be a hardware problem. How can I solve this problem? Is there an alternative for the mouse_force commands? I already tried the mouse_sync command, but it doesnt worked.

My code (cutted):

my.pan -= p_sens * mouse_force.x * time_step; // Mouse movement changing the players pan
camera.pan = player.pan;
camera.tilt += p_sens * mouse_force.y * time_step; // Mouse movement changing the players tilt
if(camera.tilt > 70 )
camera.tilt = 70;
if(camera.tilt < -70 )
camera.tilt = -70;

"p_sens" is a variable with pre-defined value 8

I appreciate for any help.

German:

Ich arbeite gerade an der Steuerung für mein Projekt und möchte dabei möglichst vieles selbst schreiben. Es handelt sich um eine "Horror-Adventure" aus der First-Person Sicht. Der Spieler soll mit den Pfeiltasten laufen/strafen können und sich mit der Maus umschauen. Es funktioniert soweit auch ganz gut, nur das Umschauen klappt nicht 100% wie ich mir das wünsche: Wenn ich die Maus langsam bewege, läuft das Umschauen schön flüssig und in guter Geschwindigkeit ab. Bei schnellen Bewegungen geht das Umschauen nur ganz langsam und ruckelig.
Bewege ich die Maus langsam um die 2-3cm, dreht der Spieler sich um gute 180°, wenn ich die Bewegung schneller und weiter führe, gerade mal um ca 30° (Problem mit der Abtastrate?). Mausbeschleunigung AN/AUS in Windows macht auch keinen Unterschied. In anderen, kommerziellen Spielen, habe ich damit keine Probleme, es liegt also nicht an meiner Maus selbst.
Wie kann man das besser lösen? Gibt es eine Alternative zu den mouse_force Befehlen? Den mouse_sync Befehl habe ich bereits ausprobiert, hat allerdings nichts gebracht.

Meine Variante lautet (Ausschnitt):

my.pan -= p_sens * mouse_force.x * time_step; // Mausbewegung verändert PAN des Players (my)
camera.pan = player.pan;
camera.tilt += p_sens * mouse_force.y * time_step; // Mausbewegung verändert TILT
if(camera.tilt > 70 )
camera.tilt = 70;
if(camera.tilt < -70 )
camera.tilt = -70;

"p_sens" habe ich als Variable mit dem Wert 8 festgelegt.

Wäre dankbar für jegliche Hilfe!
Posted By: Lukas

Re: Problem: Player looking around with mouse - 03/22/10 17:44

Versuch das ganze mal ohne time_step. Denn mouse_force ist ja die Bewegung pro Frame, also im Prinzip schon frameabhängig.
Posted By: KingdaKa

Re: Problem: Player looking around with mouse - 03/22/10 18:05

time_step raus zu nehmen, hat leider nichts gebracht. Außerdem wird time_step auch benötigt, unterschliedliche FPS haben auch unterschiedliche Mausgeschwindigkeiten zur Folge (habe ich getestet).
Posted By: Lukas

Re: Problem: Player looking around with mouse - 03/22/10 18:29

Hmm, dann kann es auch an deiner (Hardware-)Maus liegen. Manche Mäuse haben Probleme, wenn man sie zu schnell bewegt und bewegen sich dann zum Teil sogar rückwärts. Dass die andren Spiele funktionieren, kann daran liegen, dass da die Mausempfindlichkeit höher eingestellt ist. Versuch also mal, p_sens höher zu setzen und dann die Maus zu bewegen. Wenn es dann geht, dann brauchst du wohl eine bessere Maus.

Ansonsten weiß ich auch nicht weiter. (Es sei denn du hast eine Framerate von 10fps, dann brauchst du einen besseren Computer grin )
Posted By: KingdaKa

Re: Problem: Player looking around with mouse - 03/23/10 15:02

Meine Fps liegen in diesem Testlevel bei 200+, daran liegt es wohl nicht. Mit höherer Maussens, fällt es zwar nicht mehr so auf, aber das Grundproblem besteht weiterhin: Langsame Bewegungen sorgen für eine größere Drehung des Spielers als schnelle Bewegungen. Kann mir das wirklich nur damit erklären, dass die Engine wirklich ein Problem mit meiner Laser-Maus (Logitech G3) hat
Posted By: Lukas

Re: Problem: Player looking around with mouse - 03/23/10 16:41

"Mit höherer Maussens, fällt es zwar nicht mehr so auf, ..."

Heißt das, wenn du mit doppelter Mausempfindlichkeit die Maus um die halbe Entfernung verschiebst, funktioniert es?
In diesem Fall kann es normalerweise wirklich an der Maus liegen. Aber da du Lasermaus sagst, kann ich mir auch nicht vorstellen, dass die so schlecht verarbeitet wäre. Probier es aber am besten trotzdem mal mit einer anderen Maus aus, oder ob es bei anderen Spielen auch solche Probleme mit der Maus gibt, wenn du die Mausempfindlichkeit niedriger einstellst.

Was auch sein kann, ist dass GS aus irgendeinem Grund bei mouse_force auch bei unterschiedlichen Geschwindigkeiten beim gleichen Weg unterschiedliche Werte zurückliefert. Versuch einfach mal ob es mit mickey besser geht.
Posted By: KingdaKa

Re: Problem: Player looking around with mouse - 03/23/10 19:13

Ne leider funktioniert es auch nicht mit schnellerer Maussens. Das es etwas weniger auffällt, liegt einfach daran, das man durch die schnelle Maussens so oder so nur noch weniger Kontrolle hat und der unterschied weniger auffällt.

Mit mickey habe ich experementiert, dass scheint mir wohl insgesamt die bessere Lösung zu sein. Allerdings ist mickey quasi die Mausbeschleunigung (Mausbewegung in Pixel pro Frame) und da tritt der Effekt dann genau anders herum auf. Langsame Bewegungen wenig Umdrehung, schnelle Bewegungen größere Umdrehungen. Eigentlich will ich ja eine konstante Drehung unabhängig von der Mausbewegungsgeschwindigkeit (keine Mausbeschleunigung) für größtmögliche Kontrolle.

Bei anderen Spielen habe ich keine Probleme, die Maus ist eigentlich auch sehr hochwertig. Finde leider meine alte Maus momentan nicht, aber werde das Ganze bei Möglichkeit mal mit einer Anderen testen.

Vielen Dank jedenfalls für die bisherige Hilfe!
Posted By: tehVolcano

Re: Problem: Player looking around with mouse - 03/28/10 13:52

Das ganze hat ein kleines Problem: mouse_force und mickey sind beide von der Mausbewegunsgeschwindigkeit abhängig. Dass langsame Bewegungen weniger Umdrehung geben, ist also ganz normal. Du kannst aber folgendes versuchen: Ersetze in deinem Code mouse_force.x und mouse_force.y durch variablen, z.b. mousemove_x und mousemove_y. Dann schreibe das hier vor den Rotationscode:
Code:
if (mouse_force.x > 0) { mousemove_x = 1;}
if (mouse_force.x < 0) { mousemove_x = -1;}
if (mouse_force.x == 0) { mousemove_x = 0;}
if (mouse_force.y > 0) { mousemove_y = 1;}
if (mouse_force.y < 0) { mousemove_y = -1;}
if (mouse_force.y == 0) { mousemove_y = 0;}



Allerdings wird es schnell auffallen, dass eine konstante Umdrehung nicht besonders gut aussieht. Am besten ist es wirklich, wenn die Umdrehunsgeschwindigkeit von der Mausbewegungsgeschwindigkeit abhängig ist.
Posted By: MTD

Re: Problem: Player looking around with mouse - 03/29/10 08:48

You could use mickey.x in mouse_force.x
Have tried to change players pan with mickey.x and it worked wink

my.pan -= p_sens * mickey.x * time_step;
© 2024 lite-C Forums