Direct Input Acquire und Picking?



  • Hallo,

    ich bin gerade dabei mir eine DInput Klasse zu erstellen und habe ein paar Fragen bezüglich eurer Erfahrungen.

    1. Ich habe verschiedene Implementationen bezüglich "Acquire" gesehen. Manche machen dies nur im Init, andere wiederrum bei jedem Update und letztere in einer schleife. Wie richtig? (folgend Beispiele)

    bool Init(...)
    {
       //...
       LPDIRECTINPUTDEVICE8->Acquire();
       //oder
       if(FAILED(LPDIRECTINPUTDEVICE8->Acquire()))
          return false;
    
       return true;
    }
    
    bool Update()
    {
       //...
       LPDIRECTINPUTDEVICE8->Acquire();
       //oder
       if(FAILED(LPDIRECTINPUTDEVICE8->Acquire()))
          return false;
    
       //... GetDeviceState
    
       return true;
    }
    
    bool Update()
    {
       HRESULT hResult;
    
       do
       {
          hResult = pdinputkeyboard->Acquire();
       }while(hResult == DIERR_INPUTLOST);
    
       //... GetDeviceState
    
       return true;
    }
    

    2. Die Struktur "DIMOUSESTATE" gibt ja relative Bewegungen zurück. Wie bewerkstelligt ihr das mit dem Picking? Zusätzliche Positionsvariable in Inputklasse, oder doch lieber auslagern?



  • Auch wenn das jetzt keine direkte Antwort auf dein Problem ist, aber DirectInput würde ich nur verwenden um einen DirectInput Joystick anzusprechen. Für Maus und Keyboard würd ich auf Windows Messages und falls notwendig Raw Input setzen. Microsoft selbst rät jedenfalls davon ab DirectInput für etwas andres als DirectInput Joysticks zu verwenden:

    MSDN schrieb:

    Overall, using DirectInput offers no advantages when reading data from mouse or keyboard devices, and the use of DirectInput in these scenarios is discouraged.

    Quelle



  • Danke hat mir geholfen, lohnt es sich WM_MOUSEMOVE und WM_INPUT zu mischen?

    Also WM_MOUSEMOVE für Picking und WM_INPUT für präzise Kamerabewegungen zu verwenden oder nur WM_INPUT mit Pointer Ballistic?



  • Wenn du schon WM_INPUT verwendest dann kannst du gleich WM_INPUT für alles verwenden denk ich. Die grundlegende Frage ist: Reichen simple Windows Messages nicht aus? Wenn ja dann WM_INPUT, sonst einfach Windows Messages und fertig...


Log in to reply