Как создать непрерывный цикл в C, где каждая итерация цикла происходит один раз за каждую итерацию цикла, в котором он находится - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю игру в c. В игре есть функция loop (), которая вызывает другие функции и обновляет их во время каждого игрового цикла. Игровой персонаж - это просто изображение персонажа. Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы изображение этого символа непрерывно перемещалось в направлении после 1 нажатия клавиши, однако мне может показаться, что оно перемещается только один раз за нажатие клавиши, то есть его нужно удерживать до получить непрерывное движение.

Вещи, которые я пробовал: Я сделал цикл while, чтобы указать, что символ будет непрерывно перемещаться до тех пор, пока не достигнет границы на экране ... У меня была проблема с тем, что цикл while был вложен во все циклы игры while, то есть вложенный loop, проходя через все итерации внутри диапазона вложенного цикла, прежде чем outloop выполнил его один раз, означая, что игровой персонаж мгновенно перескочил к границе игры.

попытался сделать это с помощью оператора if, который, как и ожидалось, выполняется только один раз.

Я также пытался использовать логическое значение для чтения истины после нажатия клавиши и пробовал несколько разных версий.

Мне просто нужны идеи о том, как заставить изображение персонажа двигаться непрерывно в зависимости от его сохраненной скорости, и сделать шаг изображения один раз за итерацию всего игрового цикла.

1 Ответ

0 голосов
/ 28 апреля 2019
int is_moving = 0, speed = 0;
char direction = '0';
while(1){ //game loop
    if(/* north keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'n';
    }
    else if(/* east keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'e';
    }
    else if(/* south keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 's';
    }
    else if(/* west keypress event */){
        is_moving = 1;
        speed = 1;
        direction = 'w';
    }

    for(int steps = 0; steps < speed && is_moving; ++steps){
        /* movement logic and other checks go here */
    }
    ++speed;
}

Просто установите is_moving на 0, как только персонаж перестанет двигаться.Очевидно, это простой пример, но, похоже, у вас уже есть направленная составляющая скорости.
Редактировать:
В теле цикла for вам понадобитсячтобы проверить значение direction и затем заставить персонажа двигаться соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...