SDL_KEYDOWN не работает, вместо этого получил код 771

Вот мой код:

void MainGame::ProcessInput()
{SDL_Event Evnt;
while (SDL_PollEvent(&Evnt));
{switch(Evnt.type)
{case SDL_QUIT:         {_GameState = GameState::EXIT;}
break;
case SDL_MOUSEMOTION:   {}
break;
case SDL_KEYDOWN:       {_InputManager.PressedKey(Evnt.key.keysym.scancode);}
break;
case SDL_KEYUP:         {_InputManager.ReleasedKey(Evnt.key.keysym.scancode);}
break;
case 771:               {std::cout << "Info1 = " << Evnt.key.keysym.scancode << std::endl;
_InputManager.PressedKey(Evnt.key.keysym.scancode); }
break;
}
}
}

Так что в этом коде, если я нажимаю стрелки вверх, вниз, влево и вправо, KEYDOWN работает правильно. Если я нажму на клавиатуре какие-либо буквы, будет возвращен только код 771. Здесь я сделал тест, включив 771 в моем переключателе. Когда я нажимаю буквы, он переходит к 771 и печатает глупое число, например 30445778. И это число меняется каждый раз, когда я перезапускаю программу. Человек, что здесь происходит?!? Помогите мне, пожалуйста

0

Решение

Проблема, с которой вы сталкиваетесь, является дополнительной ; после вашего while состояние. Приводя SDL вики, Ваш код должен быть написан следующим образом:

while (1) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
}
/* do some other stuff here -- draw your app, etc. */
}

Обратите внимание, что после точки с запятой нет while,

Однако, хотя код, который вы написали, не делает то, что вы хотите, он все же корректен с точки зрения C ++.

Эта строка:

while (SDL_PollEvent(&Evnt));

войдет в цикл, который будет повторяться до точки SDL_PollEvent возвращается 0пока ничего не делает.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector