Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





unsigned int Joystick{unsigned char stick)

{

asm {

cli;запретить прерывания

mov ah,byte ptr stick;замаскировать АН,

;чтобы выбрать джойстик

хоr аl,аl;обнулить AL

xor cx,cx;обнулить СХ

mov dx,JOYPORT;используем DX для ввода и вывода

out dx,al

discharge:

in al,dx;читаем данные из порта

test al,ah;изменился ли бит запроса?

loopne discharge;если нет, повторяем чтение

sti;разрешить прерывания

хог ах, ах;обнулить АХ

sub ах,сх,;теперь АХ содержит позицию джойстика

} // конец ассемблерного блока

// возвращаемое значение содержится в АХ

} // конец функции

(Кстати, встроенный ассемблер мне все больше и больше нравится.) Программа достаточно проста: при запуске программа обнуляет регистры АХ и СХ;

§ Затем программа опрашивает порт джойстика;

§ Далее подсчитывается количество циклов в ожидании, пока установится нужный бит;

§ Подсчет выполняется в регистре СХ с помощью инструкции LOOPXX (в данном случае используется команда LOOPNE);

§ Инструкция TEST определяет установку бита;

§ Когда нужный бит установлен, программа выходит из цикла. Результат передается вызывающей программе, в регистре АХ.

С этим вроде все. Позже я покажу демонстрационную программу, в которой применяются все функции джойстика. Благодаря обращению к BIOS она обладает лучшей совместимостью, легче переносима и умеет производить само­калибровку. Я думаю, что и вы будете пользоваться ею.

Калибровка джойстика

Теперь разберемся с калибровкой джойстика. Как я уже говорил ранее, резуль­тат, который мы получим от чтения джойстика в цикле, будет разным на разных ПК. На одних компьютерах значения по оси Х окажется в пределах от 0 до 255, на других - от 0 до 10000.

Таким образом, нам надо нормализовать эти данные или масштабировать их. Стандартным приемом в данных случаях может служить калибровка джой­стика самим игроком в setup'e игры. Во время этой процедуры игрок двигает джойстиком, а программа считывает и запоминает данные калибровки где-ни­будь на диске для дальнейшего использования.

Для того чтобы проанализировать джойстик, программа должна:

§ Найти значения максимального и минимального отклонения по осям Х и Y;

§ Сохранить эту информацию;

§ Использовать полученные данные для выяснения, на какой угол игрок отклонил ручку джойстика.

Например, джойстик был откалиброван и мы обнаружим, что ось Х имеет значения от 0 до 255. Затем, если значение джойстика, например, по координате Х окажется равным 128, то можно с уверенностью сказать, что рукоятка находится в среднем положении (кстати, в процессе калибровки средняя пози­ция также запоминается).

Осталась одна маленькая деталь, о которой стоит сказать — это детекти­рование джойстика (то есть проверка его наличия). Обычная техника детекти­рования такая: в цикле опрашивается порт джойстика в течение определенного времени. Но надо сказать, что с помощью функций BIOS это можно сделать более надежно. Если после вызова функции значения по всем координатам равны 0, то никакого джойстика нет.

Я думаю, что мы уже сказали о джойстиках все. Теперь напишем небольшую программку, в, которой используем функции из Листингов 3.1 и 3.2. При старте она просит игрока:

§ Подвигать джойстиком;

§ Установить джойстик в среднее положение;

§ Понажимать на кнопки.

Затем, программа сохраняет результаты процедуры калибровки в глобальных переменных.

Date: 2015-09-18; view: 452; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.004 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию