Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 17:34   #1
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию SDL + switch = странное поведение

Здравствуйте!

Использую SDL, этот участок кода выбирает одно из действий в зависимости от нажатой клавиши. Но странно то, что, в каком бы порядке не были расставлены эти case`ы, происходит то событие, которое стоит последним в списке вариантов.

Код:
if( event.type == SDL_KEYDOWN )
{
	//Set the proper message surface
	switch( event.key.keysym.sym )
	{
	case SDLK_ESCAPE: exit(1);
	case SDLK_UP: WAIT4KEY = 0;
	case SDLK_DOWN: WAIT4KEY = 0;
	case SDLK_LEFT: WAIT4KEY = 0;
	case SDLK_RIGHT: WAIT4KEY = 0;
	} //WAIT4KEY = 0;
}
Т.е. если в конце стоит
Код:
case SDLK_RIGHT: WAIT4KEY = 0;
то вне зависимости от того, какая курсорная клавиша была нажата, переменная WAIT4KEY будет равна 0. От перемены мест условий результат не меняется.

Однако, клавиша Esc обрабатывается адекватно, при нажатии на нее происходит выход из программы, но курсорные клавиши работают "на своей волне". Если же поставить условие
Код:
case SDLK_ESCAPE: exit(1);
в конец списка условий, то нажатия любой из пяти клавиш приводят к выходу из программы.

Что не так? Делал по примеру из http://lazyfoo.net/SDL_tutorials/lesson08/index.php
mmx358 вне форума
Старый 04.01.2012, 18:09   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Код:
//Set the proper message surface
	switch( event.key.keysym.sym )
	{
	case SDLK_ESCAPE: exit(1); break;
	case SDLK_UP: WAIT4KEY = 0; break;
	case SDLK_DOWN: WAIT4KEY = 1; break;
	case SDLK_LEFT: WAIT4KEY = 2; break;
	case SDLK_RIGHT: WAIT4KEY = 3; break;
	}
Забыли про инструкцию break после каждого тела case. Без нее у вас выполняются все инструкции case.
MaTBeu вне форума
Старый 04.01.2012, 23:16   #3
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Какой позор :D Закрывайте, удаляйте, чтобы никто не увидел :D
mmx358 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
странное поведение WNetAddConnection2 sdsfy Работа с сетью в Delphi 0 02.08.2011 23:35
Com порт - странное поведение BoozZzilla Общие вопросы Delphi 10 16.07.2011 01:39
Странное поведение gets alex_alpha Общие вопросы C/C++ 3 27.03.2010 18:21
Странное поведение null Vitalyk JavaScript, Ajax 6 13.02.2010 15:22
Странное поведение процедуры Sergey1974 Общие вопросы Delphi 2 11.12.2009 21:41