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

Issue with changing a variable within a SetObject on C++

本文关键字:变量 问题 C++ SetObject      更新时间:2023-10-16

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