Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить смещение мышки, DirectX9, Горнаков глава16 - мышь 
V
    Опции темы
neosapient
Дата 8.3.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Код

LPDIRECTINPUT8              pInput             = NULL;      // Главный DirectInput объект
LPDIRECTINPUTDEVICE8        pMouse             = NULL;      // Устройство DirectInput
DIMOUSESTATE  mouse;

   if(FAILED(DirectInput8Create(hinstanceMain, DIRECTINPUT_VERSION, 
               IID_IDirectInput8, (void**)&pInput, NULL)))
        return E_FAIL;
  if( FAILED(pInput->CreateDevice(GUID_SysMouse, &pMouse, NULL)))
          return E_FAIL; 
    // Установка формата данных 
    if( FAILED(pMouse -> SetDataFormat(&c_dfDIMouse))) 
          return E_FAIL;
   // Установка уровня взаимодействия 
    if( FAILED(pMouse -> SetCooperativeLevel(hwndMain, 
                               DISCL_FOREGROUND| DISCL_EXCLUSIVE)))
          return E_FAIL;
   // Захват доступа 
    if( FAILED( pMouse -> Acquire()))
          return E_FAIL;
    if(FAILED(pMouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mouse)))
          return E_FAIL; 
    // Убираем курсор с дисплея
    ShowCursor(FALSE);
    // Обработка нажатия левой кнопки мыши
    if( mouse.rgbButtons[LEFTBUTTON] &0x80)
    {
        fRotateY+= 2.0f * D3DX_PI/ 100.0f;
    }
    // Обработка нажатия правой кнопки мыши
    if( mouse.rgbButtons[RIGHTBUTTON] &0x80)
    {
        fRotateY-= 2.0f * D3DX_PI/ 100.0f;
    }
    // Обработка смещения мыши
    if( mouse.lX>0)
    {
        fRotateY-= 2.0f * D3DX_PI/ 100.0f;
    }
    // Обработка смещения мыши
    if( mouse.lX<0)
    {
        fRotateY+= 2.0f * D3DX_PI/ 100.0f;
    }
    pMouse->Unacquire();
    if(pMouse!=NULL)
        pMouse->Release();


Реагирует на нажатие клавишь мыши  smile , но на смещение мышки не реагирует  smile 
Подскажите, как исправить? Что я делаю не так

Это сообщение отредактировал(а) neosapient - 8.3.2007, 21:47

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Urok16_2.rar 86,34 Kb
PM MAIL   Вверх
NOT
Дата 8.3.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.6.2005
Где: UA::CK

Репутация: нет
Всего: нет



Когда разделил ф-цию ДиректИнпута на две: инициализацию и получение статов от мышки в частности, тогда все заработало. Иногда роскакивает в изначальном варианте, поворот при очень частом и резком дерганьи мышкой, но в других случаях попадает на нуль lX, приходит на ум только, что происходит какая-то нестыковка во времени, из за задержки, т.к. каждый фрейм пересоздается устройство ввода.

Это сообщение отредактировал(а) NOT - 8.3.2007, 23:03
PM MAIL WWW   Вверх
neosapient
Дата 8.3.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Не получилось  smile 
Разделил функцию InitialInput на InitialInput и UseInput, непомогло.

Покажи как ты 
Цитата

разделил ф-цию ДиректИнпута на две: инициализацию и получение статов от мышки в частности, тогда все заработало


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Urok16_2.rar 86,37 Kb
PM MAIL   Вверх
NOT
Дата 8.3.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.6.2005
Где: UA::CK

Репутация: нет
Всего: нет



В выше приведенном примере у тебя и инпут клавы работать не будет.
Правленная версия. У мну работает.

Это сообщение отредактировал(а) NOT - 9.3.2007, 10:07

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  main.rar 4,53 Kb
PM MAIL WWW   Вверх
neosapient
Дата 9.3.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Ты закоментировал куски кода с захватом и освобождением клавиатуры и мыши.
Теперь в твоем примере клавиатура НЕ работает, а мышка работает всё также: нажатия на кнопки регистрируются, а смещение мышки не регистрируется.
В общем пока старая ошибка не исправлена (на смещение мыши) и появилась новая ошибка (нажатия на клавиши клавиатуры не регистрируются)
PM MAIL   Вверх
NOT
Дата 9.3.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.6.2005
Где: UA::CK

Репутация: нет
Всего: нет



Перезакачал правленный, тот правда не работал, перепутал версии файлов, по ошибке сунул левый.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  main.rar 4,53 Kb
PM MAIL WWW   Вверх
neosapient
Дата 9.3.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Э, как я понял свою ошибку, при вызове UseInput() происходил захват и освобождение мыши и клавы.
Между двумя вызовами UseInput() не сохранялось промежуточное (предшествующее) состояние. Отсюда смещение не вычислялось и всегда возвращался ноль. 

Спасибо...  smile 

PS 
помоги, Не понимаю, как вращать кубы в разных направлениях 

Это сообщение отредактировал(а) neosapient - 9.3.2007, 22:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.