C中的T型翻转翻牌 - 如何压缩

时间:2015-11-19 19:25:18

标签: c flip-flop

Flip Flop Fun

我已经尝试用c中的游戏手柄编写一些函数一段时间了。当在游戏手柄上按下按钮时,调用vexRT[Btn4D](' 4D'仅表示向下方向的第四组按钮)将返回true或false。 如果你有一个布尔值,比如x,你想转向' x'只需按一下按钮并释放按钮并保持打开状态,就没有预定义的简单方法/功能。 所以我花了一些时间想出一个简单的触发器,可以在这里看到:

if (vexRT[Btn7D]) {
        if (y)
            x = false;
        else
            x = true;
    }
    else if (counter == 0) {
        counter = 25;
        if (x)
            y = true;
        else
            y = false;
    }
    else
        counter--;

然后简单地说,你可以说if(x)或if(!x)并做任何你想做的事情。

问题在于我在游戏手柄上有8个按钮,我希望每个按钮都有自己的能力来翻转'。我可以简单地复制代码八次,制作一个新变量,如x2和counter2,但这似乎是多余的。我尝试制作一种缩短总代码的方法,但我知道它不起作用。无论如何它在这里:

bool tFlip(bool x) {
bool y = !x;
if (y)
    return true;
else
    return false;
}

长话短说,如果有人知道如何正确编码这些我喜欢知道的事情。我试过谷歌搜索,但我找不到任何东西。感谢。

TLDR:任何人都知道如何编写触发器?

编辑: 这一切都在一个循环中,所以我不能简单地做

x = !x

按下按钮时会不断调用; x的值基本上是随机的'当你释放。 y是作为一个等到关键释放'因为没有原生键按下/按下按键检测方法。

1 个答案:

答案 0 :(得分:0)

每个按钮需要两条信息。

  1. 在最后一个样本上,按钮是向上还是向下?
  2. 触发器的状态是0还是1?
  3. 您需要第一个按钮状态来检测从上到下的边缘。

    你需要第二个触发器状态,这样你就可以在看到边缘时切换状态。

    您可以通过多种方式表示八个按钮的状态,例如,使用16个变量,使用位向量,使用struct s数组等。这里我将使用两个数组:< / p>

    bool button[8];
    bool flipflop[8];
    

    您还需要将每个触发器与游戏手柄按钮相关联。如,

    int btnID[8] = { ..., Btn4D, ...};
    

    您需要将...替换为您感兴趣的游戏手柄按钮。

    现在,每毫秒,这样做

    #define DOWN (0)  /* as appropriate for your gamepad */
    
    for (i = 0; i < 8, i++)
    {
        if (button[i] != vexRT[btnID[i]])
        {
            button[i] = !button[i];
            if (button[i] == DOWN) /* edge */ flipflop[i] = !flipflop[i];
        }
    }
    

    要获得触发器状态,只需阅读感兴趣的按钮flipflop[n]n

    所有这一切都忽略了按钮的去抖;希望你的游戏手柄库为你做到这一点。