Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Четверг, 16.05.2024, 22:03
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Мультимедиа

Работа с джойстиком в Delphi

Работа с джойстиком в делфи

 

Всем привет. В сегодняшней статье речь пойдет о том, как же наш проект в делфи заставить подчиняться игровому джойстику. Этот пример будет полезен как создателям игр, там и создателям мультимедийных приложений вообще. Сразу скажу, что работать в делфи с устройствами Hid, к которым относятся и джойстики можно разными способами. Например, через дополнительные компоненты, DirectX, mmsystem и т.д. А поскольку мой сайт ориентирован на новичков, то я думаю, мы рассмотрим самый простой и быстрый вариант. В котором нам не нужно будет что-то дополнительно устанавливать или настраивать.

 

Итак, приступим. Первое, что необходимо сделать после создания проекта, это в разделе uses дописать библиотеку mmsystem; И вообще у меня после компиляции проекта делфи сам добавил еще один модуль ComCtrls. Если у Вас при запуске будут возникать ошибки, а этого модуля не окажется в этом разделе, то допишите его вручную.

 

На следующем этапе мы должны будем создать переменную с типом джойстика. Придумайте ей название и пропишите ее в разделе var^

 

Var

myjoy: tjoyinfo;

 

После всего выше перечисленного мы уже можем получать доступ ко всем кнопкам и стрелочкам джойстика. Далее нужно определиться где именно мы будем обрабатывать нажатия кнопок. Лично я выбрал как вариант – таймер. Поэтому я расположил на форме компонент Timer с вкладки system. Выставил его свойство Interval=60. Для того чтобы скорость проверки нажатия на кнопки и прорисовки графики была большая.

 

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

 

joygetpos(joystickid1,@myjoy);

 

Цифра 1 означает, что мы будем обрабатывать первый джойстик в системе, если нам нужен второй, то поставьте там цифру 2. После этого мы собственно можем выводить все данные в заголовок нашей формы:

 

form1.Caption:='X='+inttostr(myjoy.wxpos)

+' Y='+inttostr(myjoy.wypos)

+' Button='+inttostr(myjoy.wButtons);

 

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

 

Можно подключить джойстик и запустить программу. Теперь нажимая разные кнопки и стрелочки на джойстике, мы видим как изменяются данные. Ориентируясь на них, мы будем управлять из джойстика программой.

 

Предлагаю здесь же в системе создать цветной квадрат, которым можно будет управлять с помощью джойстика. Для этого в таймере пишем следующий код:

 

Form1.Canvas.Brush.Color:=clgray;

Form1.Canvas.Rectangle(XX,YY,64+XX,64+YY);

 

Также перед этим не забываем в разделе Var объявить переменные с координатами нашего квадрата, чтобы мы знали где его рисовать на форме:

 

Var

XX,YY:integer;

 

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

 

XX:=300;

YY:=200;

 

Также хочу заметить, чтобы вы никогда не называли свои переменные именами типа: type, name, x, y, position, top, left и т.д. Иначе могут возникнуть ошибки. Ведь делфи часто принимает эти переменные как свойства формы или другого компонента и тогда найти ошибку очень тяжело. Ведь логически все будет написано правильно. Я сам с таким сталкивался, поэтому предостерегаю от этого Вас.

 

Идем далее. Если мы запустим программу, то уже увидим серый квадрат, который пока еще не движется. Поэтому внутри таймера давайте напишем следующий код перед прорисовкой квадрата:

 

движение вверх

if myjoy.wypos=0 then

dec(YY);

 

движение влево

if myjoy.wxpos=0 then

dec(XX);

 

движение вниз

if myjoy.wypos=65535 then

inc(YY);

 

движение вправо

if myjoy.wxpos=65535 then

inc(XX);

 

Запустите программу и попробуйте управлять вашим квадратом. Очевидно Вашей радости нет предела! Но это еще не все. Теперь нам нужно научиться обрабатывать еще и другие кнопки. Благодаря коду, который мы прописали ранее, при нажатии любой кнопки – мы видим ее номер. Поэтому я привожу код обработки моего джойстика, а Вы измените его под свой. Так как номера кнопок могут не совпадать. Напишем код, благодаря которому при нажатию на определенную кнопку будет показываться сообщение:

 

if myjoy.wbuttons=1 then Showmessage(‘Кнопка 1’);

if myjoy.wbuttons=4 then Showmessage(‘Кнопка 4’);

if myjoy.wbuttons=8 then Showmessage(‘Кнопка 8’);

if myjoy.wbuttons=2 then Showmessage(‘Кнопка 2’);

 

Запустите проект и убедитесь в его работоспособности! Я думаю, этого примера будет более, чем достаточно для Вас. На момент написания статьи, в интернете не было ни одной более менее полной и простой статьи по работе с джойстиком как эта – поэтому пользуйтесь на здоровье!

 

И у меня на этом все. С Вами был Виталий Соколов. Добавляйтесь в нашу группу в контакте или регистрируйтесь на сайте и будьте в курсе всех новых статей, обсуждений на форуме и видео уроков.

 

Автор: Виталий Соколов

Источник: delgame.at.ua

Категория: Мультимедиа | Добавил: Armageddets (06.11.2014) | Автор: Работа с джойстиком в делфи
Просмотров: 3531 | Теги: создание игр в делфи, как создать игру для джойстика, мультимедиа в делфи, работа с джойстиком в делфи, работа с джойстиком в Delphi | Рейтинг: 1.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Уроки по созданию каких игр Вам интересны?
Всего ответов: 167
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0