Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.06.2010, 11:16

RawInput: RI_KEY_BREAK & Pfeiltasten

Also wenn ich überprüfe will, ob eine Pfeiltaste losgelassen wurde, funkioniert das nicht, da kein RI_KEY_BREK Flag gesetzt wird. Bei w,a,s,d funktioniert es einwandfrei.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    if(GetRawInputBuffer(NULL, &mSize, sizeof(RAWINPUTHEADER)) != 0)
        return;

    if(mSize == 0)
    {
        GetRawInputData((HRAWINPUT)mLParam, RID_INPUT, NULL, &mSize, sizeof(RAWINPUTHEADER));

        BYTE* inputBuffer = new BYTE[mSize];

        if (GetRawInputData((HRAWINPUT)mLParam, RID_INPUT, inputBuffer, &mSize, sizeof(RAWINPUTHEADER)) != mSize)
            Log::getInstance()->log(_T("Fehler beim Einlesen der Eingabe!"), WARNING);

        RAWINPUT* buffer = (RAWINPUT*)inputBuffer;
        mInput = *buffer;

        if (mInput.header.dwType == RIM_TYPEKEYBOARD)
        {
            if(mInput.data.keyboard.Flags == RI_KEY_BREAK)
                mKeys[mInput.data.keyboard.VKey] = false;
            else
                mKeys[mInput.data.keyboard.VKey] = true;
        }
        else if (mInput.header.dwType == RIM_TYPEMOUSE)
        {
            mX = mInput.data.mouse.lLastX;
            mY = mInput.data.mouse.lLastY;
        }

        delete[] inputBuffer;
    }


Dieser Code wird aus der WM_INPUT Message als Thread gestartet. Für den Input lasse ich ein unsichtbares Fenster erstellen.
Kennt sich da jemand genauer aus?
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

2

03.06.2010, 13:49

Ach ich Depp, habe ganz vergessen, dass es ja mehrere Flags sein könnten, so funktionierts:

C-/C++-Quelltext

1
2
if(mInput.data.keyboard.Flags & RI_KEY_BREAK)
    mKeys[mInput.data.keyboard.VKey] = false;
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D