如何识别输入组合

How to recognize input combination?

本文关键字:输入 组合 识别 何识别      更新时间:2023-10-16

我正在尝试创建一个函数,让我能够识别一些输入组合,比如街头霸王(或其他格斗游戏)的组合(向下、向下+向右、向右+punch=hadoken),用于我的视频游戏
我的想法是将输入放入堆栈中,然后识别组合
问题是:
当游戏循环正在运行并且您只按下一个键一段时间时,游戏将识别您输入的X倍(X=您按下该键时经过的循环数)。我试着用计时器来限制输入的数量,但这似乎不是一个好的解决方案。

知道吗?

组合是一系列关键事件。因此,您可以为序列的当前事件提供某种指针/迭代器,然后当您从窗口中获得新的sf::Event时,您可以更新指针/迭代器:如果它与下一个不匹配,则重置指针/迭迭代器;否则,则递增指针。如果到达序列的最后一个事件,则具有有效的组合。

以下是一些伪代码,可能会使其更加清晰:

class Combo
{
    sequence events;
    iterator it = events.begin();
    bool handle(event e)
    {
        if (e == *it)
        {
            if (it == events.end())
            {
                it = events.begin();
                return true;
            }
            else
            {
                ++it;
                return false;
            }
        }
        else
        {
            it = events.begin();
            return false;
        }
    }
}
void Manager::update(event e) // or whatever class you have
{
    sequence combos = ...;
    for (c : combos)
    {
        if (c.handle(e))
        {
            // perform combo 'c'
        }
    }
}

这样你就不需要任何定时器或堆栈了。