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