Search
Write a publication
Pull to refresh
3
0
Send message

Проектирование системы для считывания данных с устройств ввода (Часть вторая)

Reading time14 min
Views1.5K
В первой части статьи были приведены шаги по созданию системы для считывания данных с устройств ввода, основанной на алиасах. Но в первой статье не был описан процесс создания приложения, который бы показывал преимущества использования подобной системы. В этой статье будет рассмотрено создание простой игры Pong, рассчитанной на игру вдвоем, с возможностью переназначить управление и возможностью назначить на действие не одну, а несколько клавиш, не ограничиваясь только клавиатурой. Мы рассмотрим не только мышь и несколько подключенных джойстиков, но и возможность назначать комбинацию клавиш, например W + Left Mouse Button, т.е. будет продемонстрирована максимальная гибкость в работе с устройствами ввода.
Читать дальше →

Проектирование системы для считывания данных с устройств ввода (Часть первая)

Reading time10 min
Views3.2K
Когда работаешь над игровым движком, хочется сразу спроектировать его правильно — так, чтобы позднее не тратить время на мучительный рефакторинг. Когда я разрабатывал свой движок, в поисках вдохновения я просматривал исходники других игровых движков и пришел к определенной реализации (ознакомиться с ней можно по ссылке в конце статьи). В статье я бы хотел предложить решение задачи по проектированию системы, считывающей данные с устройств ввода.

Казалось бы, что тут сложного: считал данные с мышки, клавиатуры, джойстика и вызвал их в нужном месте. Так оно и есть, и чаще всего подобие такого кода можно встретить в игровых движках:

//обновления данных, полученных с устройств ввода
cotrols->Update()
...
void Player::Move()
{
  if (controls->MouseButonPressed(0))
  {
     ...
  }

  if (controls->KeyPressed(KEY_SPACE))
  {
     ... 
  }

  if (controls->JoystickButtonPressed(0))
  {
     ...
  }
}

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

Что можно предложить для решения проблемы?
Читать далее

Information

Rating
Does not participate
Registered
Activity