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