sprite — проблема с изменением переменной в SetObject при переполнении стека

Я создаю основную бесконечную игру раннер для 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();
}

0

Решение

Меняется:

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

чтобы:

    if (frame == 20)
{
run = 0;
frame = 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
2

По вопросам рекламы [email protected]