|
Здравствуйте Гость ( Вход | Регистрация ) Доступ из РоссииДля сохранения достпа из России к сайту и форуму GBX
|
||||||||||||||||||||
| radzh |
Понедельник, 27 октября 2008, 10:30
Отправлено
#1
|
|
Фанат ![]() ![]() ![]() Группа: Пользователи Сообщений: 242 Регистрация: 07 авг. 2008 Пользователь №: 27 750 ![]() ![]() |
Братцы, а как отслеживать диагональные клавиши на джойстике? У F200 он разделён на четыре кнопки, как ни нажимай - сперва приходит событие от них, только потом от второго направления.
Делать задержку реакции не хочется, будет впечатление, что интерфейс тормозит. Есть какой-то штатный ход? |
![]() ![]() ![]() |
Ответов
| Hahahoj |
Вторник, 28 октября 2008, 00:32
Отправлено
#2
|
|
Зомби ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 10 730 Регистрация: 17 дек. 2004 Пользователь №: 12 002 ![]() ![]() |
Лови "чиста типовой" шаблон из моего движка (описал всё что происходит, чтобы не осталось вопросов):
CODE //тело процедуры опроса клавиатуры. Вызывается раз в рабочий цикл if (SDL_PollEvent(&event)) // считываем значения событий ввода в переменную event switch (event.type) // проверяем тип события и реагируем на него в зависимости от типа и // источника (клавиатура компа/джойстик GP и т.п. { #ifdef GP2X case SDL_JOYBUTTONDOWN: // проверяем гп-шный стик { AEKey=event.jbutton.button; // я сохраняю последние событие для возможности углубленного анализа AEAnyKey=true; // активизируем флаг говорящий о нажатии како-то кнопки temp_KEY=false; // временный флаг, говорящий о том, что была нажата какая-то из //кнопок входящих в комбинации switch( AEKey ) { case GP2X_BUTTON_UP: { temp_KEY=true; // устанавливаем флаг, говорящий, что нажата кнопка возможно // входящая в комбинацию AEUp=true; // устанавливаем флаг говорящий что нажата кнопка вверх break; } case GP2X_BUTTON_LEFT: { temp_KEY=true; // устанавливаем флаг, говорящий, что нажата кнопка возможно // входящая в комбинацию AELeft=true; // устанавливаем флаг говорящий что нажата кнопка вверх break; } case GP2X_BUTTON_A: { AEbuttonA=true; break; // эта кнопка (А) не входит в комбинацию } // ..... // Далее, всё стандартно, таким образом заканчиваем ветку " if //(SDL_PollEvent(&event))" default: break; } } #endif default: break; } AESync(); // Здесь при необходимости ставим задержку, которую подбираем на самой // гп2х вручную так, чтобы успевала отработаться внутренняя процедура // обновления очереди, у меня в этом месте стоит процедура // синхронизации всей программы if (temp_KEY) // Если флаг нажатия кнопки дубля установлен - проверяем нажатие второй кнопки входящей в комбинацию: { //проверка на дубль if (SDL_PollEvent(&event)) // снова читаем данные по SDL_PollEvent(&event) - нам приходит второй // код если нажата комбинация. Если нажата одиночная клавиша - не // придет ничего switch (event.type) { case SDL_JOYBUTTONDOWN: { AEKey=event.jbutton.button; switch( AEKey ) { [ЭТО МЫ ПОМЕНЯЕМ!!!] case GP2X_BUTTON_UP: { AEUp=true; // устанавливаем флаг, говорящий что нажата кнопка вверх break; } [/ЭТО МЫ ПОМЕНЯЕМ!!!] case GP2X_BUTTON_LEFT: { AELeft=true; break; } // кнопки не входящие в комбинации здесь не проверяем default: break; } } default: break; } } return 0; } Проверка события в результате самом коде проста: CODE if ((AEUp)&&(AELeft)) { // сработала диагональ вверх-влево } //НО! if ((AEUp)&&(!AELeft)) { // сработала клавиша вверх } Собственно указанная выше процедура работала у меня для отлова комбинаций кнопок не являющихся диагональными (у меня F100), для твоих нужд можно слегка модернизировать заменив CASE-проверку второй кнопки в комбинации приблизительно по такому варианту: CODE case GP2X_BUTTON_UP: { if (AELeft) { AELeft=false; AEUpLeft=true; }; if (AERight) { AERight=false; AEUpRight=true; }; if (!(AEUpRight||AEUpLeft)) AEUp=true; // проверяем, вдруг клавиша направления нажата одновременно с другой // кнопкой , к примеру, файра? break; } Тогда получаем практически дубль диагональных кнопок F100 и отпадает необходимость возится с разными модификациями GP2x и в дальнейшем Wiza ( там будет 8 направлений ). При этом и недиагональные направления нажатые одновременно с кнопкой файра будут нормально срабатывать. -------------------- |
Posts in this topic
radzh Диагонали на F200 Понедельник, 27 октября 2008, 10:30
quasist если ты про пятнашки, то советую завести "пла... Понедельник, 27 октября 2008, 19:32
radzh
У меня снова головоломка, там кораблик из своей к... Понедельник, 27 октября 2008, 19:41
quasist
В gp2x тоже 8 направлений.
Ты какую тулчейну юзае... Вторник, 28 октября 2008, 12:00
radzh
Огромное душевное спасибо! :)
Перебрал всё д... Четверг, 30 октября 2008, 12:07
Hahahoj Кстати, если будет нужда в кодинге более продвинут... Вторник, 28 октября 2008, 03:29
Hahahoj В гп2х мк2 их всего 4. И комбинации.
Иногда кодебл... Вторник, 28 октября 2008, 14:44
quasist
Зачем тогда у меня SDL определяет восемь???
и
... Вторник, 28 октября 2008, 15:05
Hahahoj Потому что у тебя не перемоденный джой и не F200 Вторник, 28 октября 2008, 18:48![]() ![]() |
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
| Упрощённая версия | Сейчас: Сб., 24 окт. 2026, 13:19 |

Понедельник, 27 октября 2008, 10:30












