我目前的代码存在问题。我想要的是用&&来检查按钮,但是在这种情况下我不可能引用它们。
#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)
答案 0 :(得分:3)
您不能这样做,因为case
标签的值必须是常量。
如果您的值是组合的位标志,则无法使用switch()
检查该值,因为没有单个值可供检查。
另外,我认为你在这里使用&&
是错误的,这是布尔(逻辑),听起来好像你想要&
这是按位并用于屏蔽。
如果它是位,那么if
:s的“耙子”确实是正确的方式。
我在(遥远的!)过去使用的一个技巧是将位掩码解释为索引,并使用该索引读取函数指针的跳转表以直接转到负责的函数。但是现在没有太多理由去做这些事情。
答案 1 :(得分:1)
您遇到两个问题:第一个是使用逻辑运算符而不是按位运算符。另一个是你不能用switch
语句来做到这一点。
此外,您需要考虑如果同时按下两个按钮会发生什么。使用switch
语句,您只能处理其中一个语句。