LINUX.ORG.RU

Чот бред.

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

deep-purple ★★★★★
()

ну убери фигурные скобки :D

А больше никак не сокртаишь

fornlr ★★★★★
()
Ответ на: комментарий от RazrFalcon

Заодно не подскажите тогда как такой код сократить к минимуму? (Чтоб 1 раз отрабатывало действие).

bool run = true;
int i = 0;
while(run) {
 if (state[SDL_SCANCODE_S]){
  i++;
 }
 if (!state[SDL_SCANCODE_S]){
  i=0;
 }
 if (i == 1) {
  gty-=0.01;
 }
}

mysql_connect
() автор топика

Ловить события вместо получения состояния.

O02eg ★★★★★
()
Ответ на: комментарий от mysql_connect

Мне кажется, ты ошибся при выборе профессии...

fornlr ★★★★★
()

Как указали выше — клавиатура позволяет нажать несколько клавиш одновременно. Не знаю, как SDL позволяет это обработать (ясно, что позволяет).

Как я понимаю, в switch-case ты бы хотел обработать по одной клавише за раз (а иначе почти невозможно).

Если SDL умеет в нотификации, то лучше используй их: например создай клас с обработчиками и состоянием а затем замапь нотификации SDL с методами этого класса. Твой подход в будущем упростит имплементацию пользовательского конфигурирования клавиш.

KennyMinigun ★★★★★
()
Ответ на: комментарий от mysql_connect

(Чтоб 1 раз отрабатывало действие).

Сохранять предыдущее состояние, сравнивать с текущим.

andreyu ★★★★★
()
static bool key0old = false;
const bool key0 = state[SDL_KEY0] != 0;
if (key0 && key0 != key0old)
{
   key0old = key;
   // do something useful
}
andreyu ★★★★★
()

Сделай таблицу с функциями, проверяющими условие, и функциями, модифицирующими текущее состояние. Если первая функция из пары выстреливает, применяй вторую.

hateyoufeel ★★★★★
()
Ответ на: комментарий от mysql_connect

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

peregrine ★★★★★
()

Если отталкиваться от обозначенного куска кода, то вкратце - никак, если нужна скорость и безопасность, т.к. единственный вариант со switch - это for() от начала до конца индексации, у которого нет особых плюсов, зато минусов - дофига. Можно запилить набор пар функций-«датчиков» и функций-обработчиков, вызываемых для каждого «датчика», по которому бегать циклом после каждого SDL_GetKeyboardState(). Плюс - нормальная кодовая расширяемость, минус - каждый раз будет дополнительно вызываться десяток (или сколько их будет?) функций. Если железо позволяет, то гуд, если нет - возвращайся к if () {} else if () {} ....

jcd ★★★★★
()

Кстати, а SDL_GetKeyboardState(NULL) - точно то, что нужно? Может тебе нужен SDL_KeyboardEvent? Там как раз есть keysym, по внутренностям которого в самый раз делать switch.

jcd ★★★★★
()
Ответ на: комментарий от andreyu

А баг в моем примере никто так и не заметил :(

Можно как-то так:

static bool key0old = false;
const bool key0 = state[SDL_KEY0] != 0;
if (key0 != key0old)
{
   key0old = key;
   if (key0)
   {
      // do something useful
   }
}

или так:
static bool key0old = false;
const bool key0 = state[SDL_KEY0] != 0;
if (key0 && key0 != key0old)
{
   // do something useful
}
key0old = key;

andreyu ★★★★★
()

Пользуй


	if (state[SDL_SCANCODE_W]) { gty+=0.01; }
	if (state[SDL_SCANCODE_S]) { gty-=0.01; }
bvn13 ★★★★★
()
Последнее исправление: bvn13 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.