|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.06.2011, 14:55 | #1 |
Форумчанин
Регистрация: 17.12.2009
Сообщений: 101
|
(SDL) Управление с клавиатуры
Я уже создавал подобную тему, но вопрос в этот раз имеет несколько иной характер.
Главной проблемой так и осталось удобное управление в игре, которую я пишу. Как и раньше, что требовалось? Предположим, я жму кнопку влево, и персонаж движется в нужном направлении. Затем я, не отпуская влево, жму вниз или любую другую стрелку. Персонаж прекращает движение в прежнем направлении и движется в новом. Отпускаю клавишу вниз, и персонаж движется в прежнем направлении. Что у меня получилось: Как вы увидите из нижеследующего мною написанного алгоритма, нажатые клавиши определяются последовательно. И если я нажму клавишу вверх, то я могу, зажав другие клавиши, следовать соответствующим им направлениям. А вот если я нажму вниз, то я ещё смогу свернуть влево или вправо, а вверх персонаж не пойдёт. А дальше соответственно: жму клавишу влево, то смогу повернуть уже только вправо. Нажму вправо, уже никуда не поверну. Разумеется, если я отпущу вторую зажатую клавишу, то персонаж пойдёт туда, куда указывает первая зажатая клавиша. Но мне ещё нужно, чтобы я, не отпуская первой клавиши, нажатием второй мог менять направление движения. Я понимаю, почему происходит эта неполадка, но никак не могу придумать нормальную схему для считывания управления. Я написал следующий алгоритм: Код:
Очень важно: мне не нужно, чтобы персонаж двигался по диагонали. Только горизонтальные линии движения. Итак, у меня слёзная просьба: пожалуйста, подскажите правильный алгоритм управления в данной ситуации. Если необходимо, я сделаю нужные пояснения и выложу необходимые куски кода. |
01.07.2011, 08:40 | #2 |
Форумчанин
Регистрация: 25.02.2009
Сообщений: 145
|
А если попробовать проверить сколько нажато клавиш и выполнять ветвь только в том случае, когда нажата лишь одна из нужных клавиш.
Ну примерно так: Код:
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
|
01.07.2011, 19:24 | #3 |
Форумчанин
Регистрация: 17.12.2009
Сообщений: 101
|
Нет, увы. Как только я нажимаю новую клавишу движения, не отпуская старую, персонаж просто замирает на месте.
|
02.07.2011, 17:54 | #4 |
Форумчанин
Регистрация: 25.02.2009
Сообщений: 145
|
Угу. Я сначала не до конца понял задачу.
Только что пробовал в одном из своих Qt проектов нажать сразу на несколько клавиш, и все работает так, как вам надо. Но в Qt обработчик событий вызывается при каждом новом нажатии клавиши. А как у вас вызывается эта функция?
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
|
02.07.2011, 21:25 | #5 |
Форумчанин
Регистрация: 17.12.2009
Сообщений: 101
|
Я использую только SDL. Функции обработки каждой клавиши нет, я вызываю SDL_PumpEvents, чтобы получить новые данные, и затем возвращаю в указатель keys массив из клавиш при помощи SDL_GetKeyState, и затем уже проверяю индекс каждой нужной клавиши в массиве, была ли она зажата.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перемещение объекта по форме.(Управление с клавиатуры) | gralex10 | Помощь студентам | 1 | 28.03.2011 15:57 |
C# + SDL.net | Dimone-kun | Помощь студентам | 0 | 25.10.2010 10:11 |
Управление в игре с клавиатуры | Mr_freeman | Помощь студентам | 2 | 19.01.2010 11:07 |
Управление с клавиатуры | kpishnik | Помощь студентам | 10 | 27.07.2008 18:38 |
Управление с клавиатуры | PikeIt | Общие вопросы Delphi | 6 | 27.12.2006 17:41 |