我正在使用记事本++为GBA创建一个基本的无尽亚军游戏。我的运行角色由精灵组成,我需要在主游戏循环中以设定的间隔自动更改,但我似乎找不到允许我这样做的方法,我知道下面的代码非常基本,但我认为它的逻辑是合理的,它应该可以工作。我有四个精灵,通过以 2 为间隔更改运行变量来更改它们。提前感谢您的任何帮助。
//main game loop
while (true)
{
const uint8_t currentKeys = REG_KEYINPUT;
frame += 1;
if (frame == 4)
run += 2;
if (frame == 8)
run += 2;
if (frame == 12)
run += 2;
if (frame == 16)
run += 2;
if (frame == 20)
run = 0;
frame = 0;
if (currentKeys != prevKeys )
{
if ((currentKeys & KEY_UP) == 0) //
{
velocityY = -6.0f;
}
}
SetObject(0,
ATTR0_SHAPE(2) | ATTR0_8BPP | ATTR0_REG | ATTR0_Y(20),
ATTR1_SIZE(2) | ATTR1_X(120),
ATTR2_ID8(run));
prevKeys = currentKeys;
Update_Physics();
WaitVSync();
UpdateObjects();
}
正在更改:
if (frame == 20)
run = 0;
frame = 0;
自:
if (frame == 20)
{
run = 0;
frame = 0;
}
足以解决您的问题吗?
一个简单的错误。
您应该了解 if 函数的作用域。请注意下面的代码段。
if (frame == 20)
run = 0;
frame = 0; //this statement is executes always as it is not in above if statements scope.
由于这是在主游戏循环中,因此frame
的值总是对0
有利。但是您的要求是将frame
设置为0
(如果仅frame == 20
)。
为了实现它,请在 if (frame == 20)
的范围内插入 frame = 0;
语句。
if (frame == 20) {
run = 0;
frame = 0;
//scope of if statement
}
IF语句的范围 -
如果只有一个语句,要使用 if 语句执行,您只需使用 if 语句指定该语句即可。
if(condition)
statement;
但是,如果您有多个条件,则可以使用 {
和 }
将所有语句括起来,并将这些语句添加到 if 语句范围。
if(condition) {
statement_1; // scope begind
statement_2;
statement_3;
statement_*;
} // scope ends