-1

如果按键之间的时间过长,我正在尝试找出使输入超时的最佳方法。我应该创建一个 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 );
        }
    }
4

1 回答 1

0

请告诉我我的问题是否正确。两种情况:

1:你只想在按下A之后按下B时做某事,除非2之间经过的时间太长。

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

2:如果在按下A之后按下B,你想做一件事,如果按下A之后没有按下B,你想做另一件事。

由于在A被按下后等待超时后才知道B没有被按下,因此您需要在按下A时立即启动超时,并在再次按下A时重新启动它。实现可能是基于事件的,如果您有一个基于时间框架的运行循环,则基于定期检查;如果应用程序/线程没有做太多,则可能是繁忙的轮询循环。

投票看起来像这样:

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

bool HasTooMuchTimePassedSinceAWasPressed()
{
    return (clock() - mLastTimeAWasPressed) > (mTimeout * CLOCKS_PER_SEC)
}
于 2012-12-13T22:09:41.497 回答