Сдвиг в keystate

Тема в разделе "WASM.DirectX", создана пользователем _220, 31 мар 2006.

  1. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    В общем при обращении к массиву клавы(в DInput) после прочтения девайса все клавиши оказываются сдвинуты на 4 байта, то есть чтобы обратиться к DIK_A мне надо писать keystate[DIK_A + 4], не спрашивайте, как я это выяснил, но так работает, хотелось бы знать почему так может быть, вроде хидеры в порядке, вызовы тоже.
     
  2. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    _220

    не помню такой проблемы с DirectInput. кусок кода покажи - может опечатка какая-нибудь.
     
  3. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    сначала так:



    invoke DirectInputCreate, hInst, DIRECTINPUT_VERSION,

    DIINVOKE CreateDevice, lpdi, ADDR GUID_SysKeyboard, ADDR lpdikey, 0

    DIDEVINVOKE SetCooperativeLevel, lpdikey, hWnd, DISCL_NONEXCLUSIVE or DISCL_BACKGROUND

    DIDEVINVOKE SetDataFormat, lpdikey, ADDR c_dfDIKeyboard

    DIDEVINVOKE Acquire, lpdikey





    а потом в цикле DIDEVINVOKE GetDeviceState, lpdikey,256, ADDR keystate
     
  4. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    _220

    вроде бы все в норме.

    по-моему, такие ошибки возникают из-за опечаток - просмотри еще раз свой код (как вариант: в ESI у тебя лежит указатель на keystate, а потом указатель незаметно портится).



    зы. в Dxsdk81 для masm32 есть рабочий пример использования клавиатуры.