2017-11-06 4 views
0

GLFW hat eine Funktion, die genau das tut, was ich brauche:GLFW-Stil unendliche Mausbewegung in SDL2?

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 

Diese Funktion der Maus auf das Fenster begrenzt ist oder der Bildschirm lässt sich frei bewegen, ohne.

Eine Lösung, die ich gefunden ist der Mausposition jeden Frame zurückgesetzt werden:

SDL_WarpMouseInWindow(window, defaultMousePositionX, defaultMousePositionY); 

Aber ich würde noch gerne wissen, ob es so etwas wie glfwSetInputMode() in SDL2 ist.

+0

Ist dies nicht das Standardverhalten? Normalerweise können Sie die Maus wie jede andere Anwendung auch außerhalb des Fensters bewegen. – DingusKhan

+0

@DingusKhan AFAICT dies ist relativ (nicht absolut) Mausbewegung. Denk an FPS. – Quentin

+0

@Quentin Danke. Brauchte die Klarstellung. Ich habe geantwortet. – DingusKhan

Antwort

0

Wenn Sie eine relative Bewegung im FPS-Stil benötigen, verfügt SDL über eine SDL_SetRelativeMouseMode Funktion as seen here. Dadurch wird SDL gezwungen, nur Bewegungsereignisse zu melden, sodass sich die Mausposition nicht ändert.

Eine andere Methode wäre, die aktuellen und nächsten Positionen selbst zu verfolgen und manuell die Differential Berechnung der Strecke bewegt zu bekommen.

// Last position 
lastX = currX; 
lastY = currY; 

// Current position 
currX = event.motion.x; 
currY = event.motion.y; 

// Motion 
motionX = currX - lastX; 
motionY = currY - lastY; 

Dies könnte zu glatt, um andere Steuerverfahren übersetzen, wie Analog-Sticks und Touch-Steuerung, können Sie eine einheitlichere Erfahrung geben sollten Sie sich entscheiden, andere Plattformen zu verwenden.

+0

Auch bei SDL_SetRelativeMouseMode ist die Mausbewegung durch die Fenstergröße begrenzt, in GLFW gibt es keine Begrenzung. –