Есть ли способ визуализировать мою игру Termbox и обрабатывать события клавиатуры в том же l oop? - PullRequest
0 голосов
/ 12 января 2020

У меня проблемы с моей программой termbox, отображающей экран и обрабатывающей события клавиатуры. Недавно я закончил класс C и C ++ в моем университете. Я хотел продемонстрировать свои знания, создав основную игру Snake. Первые шаги, я хотел запустить простой рендер l oop и сделать так, чтобы текстовый блок просто двигался влево и выходил из игры по достижении 0-й x-координаты. Проблема возникает при переходе к следующему кадру рендеринга, поскольку игра выполняется однопоточной, следующий фрейм не будет отображаться, пока не будет принято новое событие клавиатуры. Обычно я ожидаю, что игра продолжит рендеринг независимо от событий, новых событий, влияющих на новый кадр.

Что касается потенциальных решений, я подумал об использовании нескольких потоков для запуска игры l oop и обработки событий клавиатуры. , Но, я думаю, это было бы излишним для такой маленькой проблемы, вероятно, есть более простые альтернативы, чем управление несколькими потоками для простой игры в змейку.

Что касается кода, это так просто, как:

while (1)
{
    tb_clear();
    draw(gameState);
    tb_present();

    struct tb_event event;
    tb_poll_event(&event);

    if (event.ch == 'q')
        break;
}

1 Ответ

1 голос
/ 12 января 2020

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

/* Wait for an event up to 'timeout' milliseconds and fill the 'event'
 * structure with it, when the event is available. Returns the type of the
 * event (one of TB_EVENT_* constants) or -1 if there was an error or 0 in case
 * there were no event during 'timeout' period.
 */
SO_IMPORT int tb_peek_event(struct tb_event *event, int timeout);
...