在C ++上更改SetObject中的变量的问题

时间:2015-04-22 13:32:00

标签: c++ sprite gba

我正在使用记事本++为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();
}

1 个答案:

答案 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