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