0

我目前的代码有问题。我想要的是检查带有 && 的按钮,但是在这种情况下我不可能引用它们。

#include "n64.h"
#include "explode.h"

MarioStruct *Mario = (void*)M64_MARIO_STRUCT;

void _start() {
    asm volatile("la $gp, _gp");
    switch(Mario->pad->currentButton && )
    {

    case BUTTON_D_DOWN:
        PrintXY(80, 80, "1, 2, 3");
        break;
    case BUTTON_D_UP:
        PrintXY(80, 80, "Oh Hi");
        break;
    case BUTTON_D_LEFT:
        PrintXY(80, 80, "Lollol");
        break;
    case BUTTON_D_RIGHT:
        PrintXY(80, 80, "Noodle");
        break;
    default:
        PrintXY(80, 80, "Default Msg");
        break;
    }
}

那么如何将开关(Mario->pad->currentButton &&)放到机箱上?例如:它在 If 语句中的样子:

if(Mario->pad->currentButton && BUTTON_D_DOWN)
4

2 回答 2

3

你不能这样做,因为case标签的值必须是常数。

如果您的值是组合的位标志,则无法使用 a 进行检查,switch()因为没有要检查的单个值。

另外,我认为您在&&此处的使用是错误的,这是布尔值(逻辑),并且听起来好像您想要&的是按位并用于掩码。

如果是位,那么if:s 的“耙子”确实是正确的方法。

我在(遥远的!)过去使用的一个技巧是将位掩码解释为索引,并使用该索引读取函数指针的跳转表以直接转到负责的函数。但是现在没有太多理由做这样的事情了。

于 2013-10-23T12:36:28.723 回答
1

您有两个问题:第一个是您使用逻辑运算符而不是按位运算符。另一个是你不能用switch声明来做到这一点。

此外,您需要考虑如果同时按下两个按钮会发生什么。使用switch声明,您将只能处理其中一个。

于 2013-10-23T12:37:27.037 回答