2016-05-24 11 views
0

Gerät: Macbook, OS X, Multitouch, SDL2.SDL_FINGERDOWN gibt falsche Cursorposition auf MultiTouch, OSX

float posX = event.tfinger.x; 
float posY = event.tfinger.y; 
if (event.type == SDL_FINGERDOWN) std::cout << "posX = " << posX << ", posY = " << posY << "\n"; 

Es gibt mir Koordinaten meines Multitouch-Geräts zurück. Wenn ich auf mein Multitouch in der linken oberen Ecke tippe, gibt es mir Koordinaten wie 0,1x0,1. OK richtig. Aber wie bekomme ich Koordinaten der Cursorposition in OS X?

Ich kann nur Koordinaten von Multitouch-Gerät bekommen, aber es bedeutet nicht, dass es die Koordinaten des Cursors auf dem Bildschirm ist. Ich meine ... Ich kann meinen Multitouch in der linken oberen Ecke tippen, aber mein Cursor befindet sich zu diesem Zeitpunkt in der rechten unteren Ecke des Bildschirms.

+0

sieht aus wie eine Art Bug – JavaRunner

Antwort

0

Wenn ich Sie richtig verstehe, wollen Sie sowohl den Punkt, wo Sie das Gerät berühren, und wo der Cursor auf dem Bildschirm ist?

Ich würde empfehlen, das SDL_MOUSEMOTION Ereignis mit:

while (SDL_PollEvent(&e)) 
{ 
    switch(e->type) { 
    case SDL_MOUSEMOTION: 
     mouseX = e.button.x; 
     mouseY = e.button.y; 
     break; 
    } 
} 

, wo die „mouseX“ und „mouseY“ Variablen die Koordinaten des Cursors auf dem Bildschirm im SDL_Window sein.

Wenn Sie die globalen Mauskoordinaten möchten, können Sie SDL_GetGlobalMouseState verwenden:

int mouseX; 
int mouseY; 
SDL_GetGlobalMouseState(&mouseX, &mouseY); 

, die erhalten Sie die globale (bezogen auf den Desktop) koordiniert.

Derzeit gibt es einen Fehler mit SDL_GetMouseState wo, wenn Sie SDL_SetWindowFullscreen verwenden und setzen Sie ihn auf randlose Vollbild (SDL_WINDOW_FULLSCREEN_DESKTOP) wird es die falschen Koordinaten, weshalb ich die Verwendung des SDL_MOUSEMOTION Ereignis recommed statt.
Es ist in Ordnung, in jedem anderen Fall zu verwenden (soweit ich das beurteilen kann).