如何识别输入组合?

时间:2014-09-04 15:05:41

标签: c++ input combinations sfml

我正在尝试创建一个功能,允许我识别一些输入组合,比如街头霸王(或其他格斗游戏)组合(向下,向下+向右,向右冲+已用),用于我的视频游戏。 /> 我的想法是将输入放入堆栈然后识别组合 问题是:
当游戏循环运行并且您只按一下键时游戏将识别您输入的X倍(X =您按下键时循环的循环次数)。 我试图用计时器来限制输入的数量,但这似乎不是一个好的解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

组合是一系列关键事件。因此,您可以在序列的当前事件中使用某种指针/迭代器,然后当您从窗口获得新的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'
        }
    }
}

这样您就不需要任何计时器或堆栈。