GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (258 стр.)

Сообщения на форуме пользователя Andrey (258 стр.)

Вопрос по DirectInput17 авг. 200419:04#0
Программирую на  Visual C++ 6.0

Подключаю заголовочные файлы и линковку нужных библиотек:

#include <dinput.h>

#pragma comment(lib , "dinput8.lib")
#pragma comment(lib , "dxguid.lib")
#pragma comment(lib , "winmm.lib")


Инициализирую:

[code = cpp]

DirectInput::DirectInput()
{
//...
  hInstance = :: GetModuleHandle(NULL);
 _log -> Report("Инициализация устрйства DirectInput: ", NO_TIME);
  hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)   inputObject, NULL );
switch (hr)		{
      case DIERR_BETADIRECTINPUTVERSION:
           _log -> Report("Плохая версия DirectInput\n", NO_TIME_ERROR);
      break;
      case DIERR_INVALIDPARAM:
           _log -> Report("Неправильная версия DirectInput\n", NO_TIME_ERROR);
      break;
      case DIERR_OLDDIRECTINPUTVERSION:
          _log -> Report("Старая версия DirectInput\n", NO_TIME_ERROR);
      break;
      case DIERR_OUTOFMEMORY:
         _log -> Report("Нехватает памяти\n", NO_TIME_ERROR);
     break;
     case DI_OK:
      _log -> Report("Ok\n", NO_TIME);
    DIOk = true;
    break;
   default:
       _log -> Report("Неизвестная ошибка\n",NO_TIME_ERROR);
//...
}

Далее создаю мышь и клавиатуру

bool Mouse::CreatDirectInput()
{
     _log -> Report("Создание устройства DirectInput Мышь: ", _OK);
    if (!inputObject || inputObject->CreateDevice (GUID_SysMouse, &mouseDevice, NULL )!=DI_OK
   {
      _log ->Report("Не удалось создать\n",NO_TIME);
      DIOk = false;
      return false;
   }
    _log -> Report("Ок\n",NO_TIME);
    _log -> Report("Установка формата данных для мыши:", NO_TIME);
    //Установка формата данных для мыши
   if (mouseDevice -> SetDataFormat(&c_dfDIKeyboard) != DI_OK) {
      _log -> Report("Не удалось установить\n", NO_TIME_ERROR);
      DIOk = false;
     return false;
   }
   _log ->Report("Ок\n",NO_TIME);
   // Установка уровня кооперации
  _log ->Report("Установка уровня кооперации:",_OK);
   if (mouseDevice->SetCooperativeLevel(hWnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE)!=
   DI_OK)
   {
   _log ->Report("Не удалось установить режим\n", NO_TIME_ERROR);
    //	DIOk = false;
    return false;
   }
   _log ->Report("Ок\n",NO_TIME);
   if (mouseDevice)
      mouseDevice -> Acquire();//Взять под контроль устройство
   return true;
}

bool Keyboard::CreatDirectInput()
{
     _log -> Report("Создание устройства DirectInput Клавиатура:", _OK);
    if (!inputObject || inputObject->CreateDevice(GUID_SysKeyboard, &keyboardDevice, NULL )!=
    DI_OK) {
      _log ->Report("Не удалось создать\n",NO_TIME);
      DIOk = false;
      return false;
    }
    _log -> Report("Установка формата данных для клавиатуры: ", _OK);
   // Установка формата данных для клавиатуры
   if (keyboardDevice -> SetDataFormat(&c_dfDIKeyboard) != DI_OK ) {
    _log ->Report("Не удалось установить\n", NO_TIME_ERROR);
   DIOk = false;
   return false;
   }
   _log -> Report("Ок\n", NO_TIME);
  // Установка уровня кооперации
  _log -> Report("Установка уровня кооперации: ",_OK);
  if (keyboardDevice -> SetCooperativeLevel(hWnd, DISCL_FOREGROUND| DISCL_EXCLUSIVE)!=
   DI_OK)
   {
     _log ->Report("Не удалось установить режим\n", NO_TIME_ERROR);
      //DIOk = false;
     return false;
   }
   _log -> Report("Ок\n", NO_TIME);
   if (keyboardDevice)
   keyboardDevice -> Acquire();//Взять под контроль устройство
   return true;
}

Далее использую клавиатуру используя метод

HRESULT Keyboard::GetStat()
{
    //char keys[256] - объявленный массив буфера клавиатуры
    if (DIOk) {
       return keyboardDevice -> GetDeviceState(sizeof(keys),keys);
    }
    else
         return 0;
}

Использовании мыши

//Получить состояние мыши
HRESULT Mouse::GetStat()
{
     DIMOUSESTATE ms;
     HRESULT h;
     if (DIOk) {
       h = mouseDevice -> GetDeviceState(sizeof(ms), &ms);
       if (h == DI_OK)
       SetMouseXY(ms.lX, ms.lY);	//Установка координат мыши
        return h;
     }
     return 0;
}

в лог файле записывается что не возможно установит кооперацию клавиатуры и мыши

Вопрос почему не работает ни клавиатура ни мышь.
Скажите что я делаю не так
Спасибо заранее
С Уважением Андрей

Правка: 18 авг. 2004 9:16

Вопросы по камере17 авг. 200414:58#9
Люди ну что больше никто не может мне подсказать?
Вопрос по С++17 авг. 20048:58#2
_Winnie

>*_Winnie вывешивает транспарант "Купи Страуструпа! Купи Страуструпа! RTFS"

Ну зачем так на начинающего.

kronos_vano

Еще нужно добавить нахождение обратной матрицы,транспонированной.
Перегрузить операторы  для перемножения 2 матриц,перемножение на число,сложение 2 матриц,перемножение на вектор и т.д.

Правка: 17 авг. 2004 9:00

Кто-нибь уже сделал что-нибудь РЕАЛЬНОЕ. Не скромничайте, хвастайтесь!17 авг. 20048:52#21
Под DOS игра "Питон" моя курсовая работа
одна игра еще не закончена.Пробую первый движок писать

Правка: 17 авг. 2004 15:00

Вопросы по камере17 авг. 20048:42#8
rewinder

>че-то я не понял, почему кватернионы не рулят?

Они то рулят еще как!!! правда я еще их не применял а только освоил я хочу пока с векторами разобраться
Ты в моек коде не знаешь что исправить?

Пытаюсь найти работу в Брянске.17 авг. 20048:38#4
gorus13
Sutugor
Есть одна компания пишет игры под мобиьные телефоны на Java.В БГТУ (Бывший БИТМ)
на кафедре "ИПО" Есть преподователь Израилев В.Я. вот он там директор.
Пытаюсь найти работу в Брянске.17 авг. 20048:30#3
gorus13
Sutugor
Народ я тоже из Брянска!!!!! давайте вместе то нибудь думать!!!!!
вот мой ICQ 242306388
вот мыло
Проекту нужны участники16 авг. 200420:40#35
Jihar
Ок
Вопросы по камере16 авг. 200420:31#6
kronos_vano
Спасибо я к тебе давно в Асю стучусь!!!!Дело в том что с матрицей более оптимизировано получается.

У темя я так понял углы Эйлера?Они имеют ограничения при угле 90 градусов что там происходит и поворот получается не правильный.Более элегантно сделать повороты на кватерионах,что я в будущем попытаюсь сделать.

>у тя тут какие-то матрицы - зачем(если не лень будет объясни, я без них работаю)...

Ты наверняка вызываешь для поворота несколько раз функцю glRotate,а это каждый раз перемножается матрица камеры а это вычислительные затраты процессора.А я меняю вектора а потом один раз перемножаю матрицу.В этом выигрыш по скорости.Вообще-то матрица камеры должна быть по  идее я во многих движках ее видел.

>Еще раз говорю - ламер я, не надо смеяться, надо объяснить почему я не прав =))))))

Это сайт не для этого создан.И я тут не для этих целей.

В общем стучись в Асю поговорим :)

Кто нибудь из Брянска Есть16 авг. 200418:20#0
Кто нибудь из Брянска Есть? Можно опытом обмениваться
Вопросы по камере16 авг. 200417:14#4
Ну что больше никто не сможет мне подскзать?
Вопросы по камере16 авг. 200413:24#3
GLoom
>Ты по событию мыши вызываешь перерисовку сцены?
Нет в фоновом цикле
>Покажи код, где ты вычисляешь позицию камеры.

Вот код

void Camera::Move(UINT nChar)
{
	const GLfloat dz = 3*_dx;
	const GLfloat dx = 3*_dx;
               	switch (nChar) {
		case 0x25:
		       Position -> x -= dx;
		       xpos = - dx;
		break;
		case 0x27:						      		      Position -> x += dx;
                                      xpos = dx;
		break;
                                case 0x28:						     		     Position -> z -= dz;
 		      zpos  = - dz;								break;
		case 0x26:								      Position -> z += dx;
      		     zpos = dz;
	}
}

>Да, но для шутерного вида лучше оставить углы.

что такое шутерный вид?

Правка: 16 авг. 2004 13:29

Есть кто из Орла?16 авг. 200412:32#1
SBJocker
C Брянска это далеко Будет считаться?
мне стало интересно а во что предпочитают играть те кто игры создаёт ?))16 авг. 200412:24#22
Quake III,Return to Castle Wolfenstein,Blade of Darkness,Mortal Kombat 4
Вопросы по камере16 авг. 200411:51#1
Ну что ни кто не может мне подсказать?

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр