Проблема с изменением переменной в SetObject на C++

Я создаю основную бесконечную игру раннер для GBA, используя notepad++. Мой бегущий персонаж состоит из спрайтов, которые мне нужно автоматически менять через заданные интервалы внутри основного игрового цикла, но я не могу найти метод, который позволяет мне это делать, мой код ниже очень простой, я знаю, но я думаю, что логика это нормально, и это должно работать. У меня есть четыре спрайта, которые меняются путем изменения переменной запуска с интервалами 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();
}

2 ответа

Меняется:

    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 только.

Для этого вставьте 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
Другие вопросы по тегам