我正在使用记事本++为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();
}
答案 0 :(得分:2)
这是一个简单的错误。
您应该了解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
。
为了实现它,请在frame = 0;
的范围内插入if (frame == 20)
语句。
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