1

我正在使用 notepad++ 为 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();
}
4

2 回答 2

3

这是一个简单的错误。

您应该了解 if 函数的范围。注意下面的代码段。

if (frame == 20)
      run = 0;
      frame = 0; //this statement is executes always as it is not in above if statements scope.

由于这是在主游戏循环中,因此 的值frame始终为0. 但是您的要求是设置frame0if frame == 20only。

为了实现它,将frame = 0;语句插入到if (frame == 20).

if (frame == 20) {
    run = 0;
    frame = 0;
    //scope of if statement
}

if 语句的范围 -

如果您只有一个语句,要使用 if 语句执行,您只需使用 if 语句指定语句即可。

if(condition)
   statement;

但是,如果您有多个条件,则可以使用{and}将所有语句括起来并将这些语句添加到 if 语句范围。

if(condition) {
  statement_1; // scope begind
  statement_2;
  statement_3;
  statement_*;
} // scope ends
于 2015-04-22T15:31:46.610 回答
3

正在改变:

    if (frame == 20)
        run = 0;
        frame = 0;

至:

    if (frame == 20)
    {
        run = 0;
        frame = 0;
    }

足以解决您的问题?

于 2015-04-22T15:05:31.500 回答