У меня есть проблема, которая, я думаю, вызвана тем, что сообщение wm_keyup отправлено неправильно.Я считаю, что та же проблема возникает в Minecraft, когда вы перемещаете своего персонажа, и ввод будет «зависать».Действие клавиши продолжается после нажатия на нее и не прекращается, пока вы снова не нажмете клавишу.Я слышал, что это может быть проблема между окнами и клавиатурой, но я не совсем уверен.Кроме того, большинство других популярных игр не имеют этой проблемы, поэтому должен быть правильный способ сделать это.Вот как выглядит мой код процедуры Windows:
case WM_KEYDOWN:
for (list<KeyInput>::iterator t = key_inputs.begin(); t != key_inputs.end(); ++t)
(*t).PushKeyDown(ConvertKeyCode(wparam));
return 0;
case WM_KEYUP:
for (list<KeyInput>::iterator t = key_inputs.begin(); t != key_inputs.end(); ++t)
(*t).PushKeyUp(ConvertKeyCode(wparam));
return 0;
Каждый объект KeyInput имеет очередь, которая заполняется с помощью клавишных вводов и очищается при запросе ввода с клавиатуры.Этот код предназначен для многопоточной игры, и этот метод гарантирует, что ни один поток не будет пропущен.Я использую взаимное исключение в объектах KeyInput.
Я получаю эту проблему больше в моей игре, чем в Minecraft, и я понятия не имею, почему.Я также получил это раньше, когда делал простой, не многопоточный код.Я не знаю, как это исправить.
Я ценю любую помощь или предложения, которые кто-либо может предложить.