2016-05-24 8 views
0

デバイス:Macbook、OS X、マルチタッチ、SDL2。SDL_FINGERDOWNは、MultiTouch、OSXのカーソル位置が間違って表示されます

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

私のマルチタッチデバイスの座標が返されます。左上隅のマルチタッチをタップすると、0.1x0.1のような座標に戻ります。 OK、そうです。しかし、どのようにOS Xのカーソル位置の座標を取得するには?

マルチタッチデバイスの座標のみを取得できますが、画面上のカーソルの座標であるとは限りません。つまり、私は左上隅でマルチタッチをタップできますが、このときのカーソルは画面の右下に表示されます。

+0

は何らかのバグのようです – JavaRunner

答えて

0

私が正しく理解していれば、デバイスに触れる位置と画面上のカーソルの位置の両方を取得する必要がありますか?

私はSDL_MOUSEMOTIONイベントを使用することをお勧めしたい:「するmouseX」と「mouseYの」変数がSDL_Window内画面上のカーソルの座標になります

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

あなたはグローバルマウス座標が必要な場合は、SDL_GetGlobalMouseStateを使用することができます。

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

座標(デスクトップに対して)あなたにグローバルを得るであろう。

現在あなたがSDL_SetWindowFullscreenを使用し、ボーダレスフルスクリーン(SDL_WINDOW_FULLSCREEN_DESKTOP)に設定した場合、それは私が代わりにSDL_MOUSEMOTIONイベントの使用を推薦理由である、間違った座標を取得しますSDL_GetMouseStateのバグがあります。
他のインスタンスでも使用できます(私が知る限り)。

関連する問題