win32 C++项目中的输入超时

Timing out input in win32 C++ Project

本文关键字:输入 超时 C++ 项目 win32      更新时间:2023-10-16

我正在尝试找出在按键之间经过太多时间时使输入超时的最佳方法。我是否应该创建一个每次调用更新时按增量递增的 cheatTime 浮点数?很晚了,我累了,脑子炸了。任何帮助将不胜感激。 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:你只想在按下 A 后按下 B 时做某事,除非 2 之间经过的时间太长。

在这种情况下,存储按下 A 的时间。按下 B 时,请检查上次按下 A 的时间。

2:如果在按下 A 后按下 B 时,您要做一件事,如果在按下 A 后未按下 B,则要做另一件事。

由于您只知道在按下 A 后等待超时后未按下 B,因此您需要在按下 A 后立即启动超时,并在再次按下 A 时重新启动它。实现可能是基于事件的,如果您有一个基于时间帧的运行循环,则基于周期性 theck,或者如果应用程序/线程没有做太多事情,则基于繁忙的轮询循环。

轮询如下所示:

void AIsPressed()
{
    mLastTimeAWasPressed = clock();
}
bool HasTooMuchTimePassedSinceAWasPressed()
{
    return (clock() - mLastTimeAWasPressed) > (mTimeout * CLOCKS_PER_SEC)
}