Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

USB GamePad (Nuclex + XNA)

Эта статья предназначена для новичков в XNA и расскажет о том, как написать код, который может обрабатывать информацию о стандартном USB совместимом геймпаде используя некоторые библиотеки Nuclex.

Немного о Nuclex, что это такое и где его искать.

 Nuclex – полноценный игровой и технический движок, основанный на использовании DirectX, также совместим с XNA GameStudio. Официальный сайт, где можно скачать компоненты системы, а также почитать подробную документацию по использованию:
http://nuclexframework.codeplex.com

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

 Теперь ближе к сути вопроса.

 В этой статейке расскажу о самом простом способе решить проблемы зависимости XNA от Xbox — контроллеров. Возможно, что со временем эту проблму уберут, ну а пока вот простой метод.

 Первым делом нужно скачать компоненты, которые отвечают за геймпады.
Все они вложены в общую папку с остальными частями Nuclex, так что придется качать все:
Прямая ссылка: http://nuclexframework.codeplex.com/releases/view/53203#DownloadId=153978
Страница с другими вариантами: http://nuclexframework.codeplex.com/releases/view/53203
 
Нам нужны следующие компоненты:

  • SlimDX.DirectInput.dll
  • Nuclex.Input.dll

Чтобы добавить их к игре, можно их просто скопировать в папку с кодом, перетащить на панель Обозревателя Решений ( Solution Explorer ), или добавить ссылку путем Проект (Project) -> Добавить ссылку ... (Add Reference). Главное — чтобы компоненты находились там же, где и исполняемый файл. После добавления, добавляем ссылки на нужные нам службы, а точнее основные: Nuclex.Input, SlimDX

И наконец программирование:

В главном классе игры (Game1) подключаем службы:

1
2
using Nuclex.Input;
using SlimDX;

 

Создаем переменные:

1
InputManager NuclexInputManager;

 


Теперь нужно заполнить наш указатель на службу и добавить компонент, делается это в инициализации класса:

1
2
3
NuclexInputManager = new InputManager(Services, Window.Handle);
 
Components.Add(NuclexInputManager);

 


 Теперь осталось лишь применить компонент, но перед этим некоторые особенности Nuclex-Input, которые следует учесть. Подробнее о них можно прочитать в официальной документации по Nuclex.

 Отличием Nuclex, скажем от Keyboard.GetState(), является индексы. Как сказано в официальной документации, она следующая: Первые 4 индекса, отвечают за стандартные средства ввода, которые совместимы и аналогичны XNA-средствам ввода, например:

1
2
3
4
5
6
GamePad.GetState(PlayerIndex.One);
 
// но с отличием:
 
// также возвращает состояние Xbox-геймпада.
NuclexInputManager.GetGamePad(ExtendedPlayerIndex.One).Getstate();

 


Остальные 4 относятся к несовместимым с XNA, и как сказано !DirectInput-compatible устройствам, например стандартный USB джойстик. Эти индекса соответственно начинаются с 5,6,7,8. Т.к. Чтобы получить информацию о USB-джойтике, можно использовать:

1
NuclexInputManager.GetGamePad(ExtendedPlayerIndex.Five).IsAttached();

 

 ExtandedPlayerIndex – дословно расширенные индекс игрока. Используется чтобы получить состояние устройства, индекс которого 5,6,7 или 8. А для XNA совместимых, используется стандартный метод:

1
NuclexInputManager.GetGamePad(PlayerIndex.One).IsAttached();

 

 Также перед использованим Nuclex, следует отказаться от использвания стандартных методов от XNA, например: GamePad.GetState(PlayerIndex.One), используя лишь методы Nuclex-Input, дабы избежать конфликтов.

На этом разбор важных особенностей можно закончить, переходим к добиванию кода.

Узнаем, подключен ли первый (единственный) геймпад:
1
NuclexInputManager.GetGamePad(ExtendedPlayerIndex.Five).IsAttached();

 

IsAttached() - как уже понятно, вернет True, если геймпад №1 подключен.
Как было сказано, это работает, если известно, что будет подключен не XNA-стандартный геймпад.

Узнаем, нажата ли кнопка A:
1
NuclexInputManager.GetGamePad(ExtendedPlayerIndex.Six).GetState().Buttons.A == ButtonState.Pressed;

 


Переход на Nuclex очень прост, т.к. синтаксис XNA Input сохранен.

Дальше думаю разберетесь, удачи в game devepoрстве.



Автор - gforcer18
Комментарии
#1 | general 12.01.2011 18:21:03
я так и не понял зачем использовать Nuclex и тянуть лишние библиотеки, если стандартными средствами все поддерживается? не раскрыт вопрос
#2 | ArtFeel 12.01.2011 18:34:23
Стандартными средствами ведь можно подключить только Xbox-gamepad
#3 | gforcer18 12.01.2011 19:27:05
а что-ли не написал про это. Я же в начале написал, что пока стандартными средства XNA USB-геймпады не поддерживают, кроме Xbox геймпадов
#4 | Hale_32bit 12.01.2011 20:11:51
Где-то читал что просто .NET поддерживает USB джойпады.
Я интересовался т.к. у меня самого два штуки лежат без дела
#5 | RaZeR 29.01.2011 19:18:18
Есть ещё Soopah.Xna.Input.dll, и не нужно весь SlimDX подключать - только чистый ввод с геймпада Всем привет
#6 | andylee 22.04.2011 12:34:39
Кто нибудь работал с событиями IsButtonDown(Buttons.LeftTrigger) и IsButtonDown(Buttons.RightTrigger)? Особенно интересно последнее, мой джостик генерит его постоянно...
#7 | zlos 01.05.2011 18:33:27
С обычными геймпадами нужно дёргать Update у геймпада или у InputManager'а, без этого ж. с осями. Полтрора часа убил. Пока не разобрался достаточно ли при инициализации/подключении или надо каждый кадр.
Проблема с триггерами может тут корни иметь.
#8 | Mafey 31.05.2011 01:36:11
Managed DirectX поддерживает обычный геймпад
#9 | zlos 14.06.2011 15:50:18
MDX не существует.
#10 | gforcer18 07.08.2011 20:53:03
Небольшие изменения:
Если геймпад поддерживает XInput (Windows-Input), то ему не нужна система Nuclex Input, т.е. он работает как Xbox360 геймпад, иначе, если геймпад работает лишь на DirectInput, то Nuclex - хороший помощник.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Отлично! Отлично! 0% [Нет голосов]
Очень хорошо Очень хорошо 100% [1 Голос]
Хорошо Хорошо 0% [Нет голосов]
Удовлетворительно Удовлетворительно 0% [Нет голосов]
Плохо Плохо 0% [Нет голосов]
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,09 секунд 8,709,664 уникальных посетителей