Maus abfangen in Spielen



  • Hi,

    wie fangt ihr die Mausbewegung in Spielen ab? (Windows, ansonsten halt System übertragen).
    Bei jedem Frame GetCursorPos()? In einem separaten Thread GetCursorPos()? Warten auf WM_MOUSEMOVE? DirectInput?



  • cooky451 schrieb:

    [...] Warten auf WM_MOUSEMOVE? [...]

    👍



  • Als Zusatz:
    Auch Microsoft rät von DirectInput mittlerweile ab und rät dazu, die WinAPI zu verwenden.
    Wenn du es ein wenig mehr OOP willst:
    wxWidgets eignet sich für diesen Zweck auch hervorragend. Glaubt man kaum, ist aber so :).
    Ein DirectX-Control ist schnell geschrieben.



  • Scorcher24 schrieb:

    Als Zusatz:
    Auch Microsoft rät von DirectInput mittlerweile ab und rät dazu, die WinAPI zu verwenden.

    Das freut mich, dann muss ich nichts Neues lernen.

    Scorcher24 schrieb:

    Wenn du es ein wenig mehr OOP willst:

    Noe, passt schon, aber danke 😃

    Bleiben noch die WinAPI Sachen. WM_MOUSEMOVE wurde ja schon für gut befunden, also ich habs momentan so:

    case WM_LBUTTONDOWN:
      GetCursorPos(&startPos);
      ScreenToClient(hwnd, &startPos);
      break;
    
    case WM_MOUSEMOVE:
      if (LOWORD(lparam) == startPos.x && HIWORD(lparam) == startPos.y)
        break;
      if (wparam & MK_LBUTTON)
      {
        camEgo.m_rotX = (LOWORD(lparam) - startPos.x) / 0.5f;
        camEgo.m_rotY = (HIWORD(lparam) - startPos.y) / 0.5f;
        ClientToScreen(hwnd, &startPos);
        SetCursorPos(startPos.x, startPos.y);
        ScreenToClient(hwnd, &startPos);
      }
      break;
    

    Allerdings erscheint mir das zu vorher, als ich noch einfach bei jedem Frame die Position abgefragt hatte, irgendwie wackeliger.. ich weiß aber nicht woran das liegt; WM_MOUSEMOVE müsste doch eigentlich schneller sein? (Ist zudem natürlich irgendwie eleganter :D)



  • Wenn du eine WinAPI-Nachricht behandelst, solltest du immer 0 zurückgeben. Und nicht break. Am Ende deiner WinProc sollte nämlich "return DefWindowProc.." stehen.
    Siehe das Sample von mir hier:
    http://www.c-plusplus.net/forum/p2050382#2050382



  • Scorcher24 schrieb:

    Wenn du eine WinAPI-Nachricht behandelst, solltest du immer 0 zurückgeben.

    Hm.. das scheint tatsächlich was zu bringen.. 😕 , danke 😃


Anmelden zum Antworten