Вот мой код:
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. И это число меняется каждый раз, когда я перезапускаю программу. Человек, что здесь происходит?!? Помогите мне, пожалуйста
Проблема, с которой вы сталкиваетесь, является дополнительной ;
после вашего 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
оператор не готов обрабатывать большинство типов событий.
Других решений пока нет …