1

DirectX Input を使用して入力マウスを管理しようとしています。しかし、マウスの X 座標と Y 座標を取得しようとすると、値が正しくありません (負またはランダムに見えます)。

私が使用したコードを示します。

bool    System::frame()
{
    bool result;
    if (input->isButtonDown(BUTTON_L)) //if left button is down
    {
        result = ReadMouse();
        if(!result)
            return false;
        ProcessInput();
    }
}

bool System::ReadMouse()
{
    HRESULT result;

    //this->mouseState is a DIMOUSESTATE ; this->mouse is a LDIRECTINPUTDEVICE8
    result = this->mouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&this->mouseState);
    if(FAILED(result))
    {
        if((result == DIERR_INPUTLOST) || (result == DIERR_NOTACQUIRED))
            this->mouse->Acquire();
        else
            return false;
    }
    return true;
}

void System::ProcessInput()
{
    this->mouseX = this->mouseState.lX;
    this->mouseY = this->mouseState.lY;

    if(this->mouseX < 0)
        this->mouseX = 0;
    if(this->mouseY < 0)
        this->mouseY = 0;

    if(this->mouseX > this->ScreenWidth)
        this->mouseX = this->ScreenWidth;
    if(this->mouseY > this->ScreenHeight)
        this->mouseY = this->ScreenHeight;
    return;
}

私の最後のテストでは、 (おおよそ) this->mouseX = -657andthis->mouseY = -36の代わりに200andが与えられました。200マウスを初期化するときに機能を確認しましたが、機能しているようです(チュートリアルに従いました)。

4

1 に答える 1

2

その理由は、DirectInput がマウスの位置の相対データを提供するためだと思います。マウスからのデータの解釈方法と絶対モードへの切り替え方法については、 http : //msdn.microsoft.com/en-us/library/windows/desktop/ee418272 (v=vs.85).aspx を参照してください。 .

DirectInput の代わりに Raw Input API を使用することをお勧めします。( http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536(v=vs.85).aspx )

于 2013-09-16T14:15:44.437 に答える