winapi — тайм-аут ввода в Win32 C ++ Project

Я пытаюсь найти лучший способ тайм-аута ввода, если между нажатиями клавиш слишком много времени. Должен ли я создать плавающий элемент cheatTime, который увеличивается на delta при каждом вызове обновления? Уже поздно, я устала и мой мозг зажарен. Любая помощь будет оценена. m_pDI является объектом-оболочкой DirectInput Внутри этого класса у меня есть ClearInput() функция, которая очистит любой ввод внутри своего буфера.

if( m_pDI->KeyDown( DIK_TAB ) && m_pDI->KeyDown( DIK_1 ) )
{
if( m_pDI->KeyDown( DIK_H ) )
{
m_bGameCheats[ 0 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
else if( m_pDI->KeyDown( DIK_C ) )
{
m_bGameCheats[ 1 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
else if( m_pDI->KeyDown( DIK_S ) )
{
m_bGameCheats[ 2 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
}

-1

Решение

Пожалуйста, скажите мне, если я правильно понял вопрос. Два сценария:

1: Вы хотите что-то делать только тогда, когда нажимается B после нажатия A, если только время, которое проходит между 2, не слишком велико.

В этом случае сохраняйте время, когда нажимается A. Когда нажимается B, проверьте время последнего нажатия A.

2: Вы хотите сделать одну вещь, если когда B нажимается после нажатия A, и что-то еще, если B не нажимается после нажатия A.

Поскольку вы знаете только, что B не нажимается после ожидания времени ожидания после нажатия кнопки A, вам нужно запустить тайм-аут, как только будет нажата кнопка A, и перезапустить его при каждом повторном нажатии кнопки A. Реализация может быть основана на событиях, на основе периодической проверки, если у вас есть цикл выполнения на основе таймфрейма, или занятого цикла опроса, если приложение / поток мало что делает.

Опрос выглядит примерно так:

void AIsPressed()
{
mLastTimeAWasPressed = clock();
}

bool HasTooMuchTimePassedSinceAWasPressed()
{
return (clock() - mLastTimeAWasPressed) > (mTimeout * CLOCKS_PER_SEC)
}
0

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

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

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