Программирование игр для Windows. Советы профессионала


Кнопки джойстика


Кнопки джойстика - это обычные переключатели (кстати, вам крупно повезло, ведь это легко могли быть зарядные, ионообменные управляемые магнитным полем подушечки). Для того чтобы узнать состояние переключателя, нам надо прочитать значение из определенного порта.

Есть джойстики с множеством кнопок, например, Trustmaster. Несмотря ни на что, его работа ничем не отличается от других джойстиков, а состояние лишних кнопок можно прочитать через другие порты ввода/вывода. Эти порты обычно указываются производителем в соответствующей документации. Обычно, порт 201h — это то окно, через которое можно общаться с джойстиком. Как показано на рисунке 3.2, этот порт связан и с джойстиком А, и с джойстиком В.

Мы узнаем назначение битов 0-3 чуть позже — в разделе «Чтение позиции джойстика». Биты 4-7 предназначены для чтения кнопок джойстика. Когда одна из кнопок нажата, то соответствующий бит порта 201h изменяется. Есть только одна маленькая деталь: значения битов всегда инвертированы. Это значит, что если вы, например, жмете кнопку 1 на джойстике А, то бит 0 изменит значение с \ на 0. Но в общем, это не особенно принципиально.

Листинг 3.1 содержит программный код чтения кнопки.

Листинг 3.1. Чтение кнопок джойстика.

#define JOYPORT      0х201 // порт джойстика = 201h

#define BUTTON_1_A   0х10   // джойстик А, кнопка 1

#define BUTTON_1_B   0х20  // джойстик А, кнопка 2

#define BUTTON_2_A  0х40   // джойстик В, кнопка 1

#define BUTTON_2_B   0х80   // джойстик В, кнопка 2

#define JOYSTICK_1_X 0х01   // джойстик А, ось ,Х

#define JOYSTICK_1_Y 0х02   // джойстик А, ось Y

#define JOYSTICK_2_X 0х04   // джойстик В, ось Х

#define JOYSTICK_2_Y 0х08   // джойстик В, ось Y

#define JOY_1_CAL 1      // эта команда калибрует джойстик А

#define JOY_2_CAL 2       // эта команда калибрует джойстик В

unsigned char Buttons(unsigned char button)

(

// эта функция читает статус кнопок джойстика

// сбрасываем содержимое порта 201h

outp (JOYPORT, 0);

// инвертируем прочитанное из порта значение и комбинируем




Начало  Назад  Вперед