Mam mały problem z funkcją directinput. Niby wszystko działa, zczytuje klawisze i wszystko [green] ale jest to metoda buforową. Chce pobrać 5 zdarzeń na raz... no i pobiera, ale jak klawisz jest cały czas wciśnięty to pobiera tylko zdarzenie że wcisnąłem klawisz... pytanie co zrobić abym mógł zareagować jak klawisz jest wciśnięty... Pisze grę platformową i wiecie chyba o co chodzi.
Kod do odpalenia Direciinput
DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&g_lpDI, NULL);
g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);
g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
g_lpDIDevice->SetCooperativeLevel(hOkno,DISCL_NOWINKEY | DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
g_lpDIDevice->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);
Kod do pobierania klawiszy
DIDEVICEOBJECTDATA* didod; // Receives buffered data
DIDEVICEOBJECTDATA lpdidod; // Receives buffered data
DWORD dwElements=4;
DWORD i;
do
{
g_lpDIDevice->Acquire();
hr = g_lpDIDevice->GetDeviceData( sizeof(DIDEVICEOBJECTDATA), didod, &dwElements, 0 );
}
while(dwElements == 4);
if (FAILED(hr)) return false;
for(i=0; i<dwElements; ++i)
{
lpdidod=didod[i];
if (lpdidod.dwData & 0x80)
switch(lpdidod.dwOfs)
{
case DIK_RIGHT:
// itd...