![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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: 500; Нарушение авторских прав |