有没有办法在同一个循环中呈现我的 Termbox 游戏和处理键盘事件?
Is there a way to render my Termbox game and handle keyboard events in the same loop?
我的 termbox 程序在渲染屏幕和处理键盘事件时遇到问题。最近,我在我的大学完成了 C 和 C++ class。我想通过创建一个基本的贪吃蛇游戏来展示我的知识。第一步,我想要一个简单的渲染循环,让一段文本简单地向左移动并在到达第 0 个 x 坐标时退出游戏。继续下一个渲染帧时会出现问题,因为游戏是 运行ning 单线程,在接受新的键盘事件之前不会渲染下一帧。通常,我希望游戏继续渲染,而不管事件,影响新帧的新事件。
至于可能的解决方案,我考虑过使用多线程 运行 游戏循环和处理键盘事件。但是,我认为这对于这么小的问题来说太过分了,可能有比为一个简单的贪吃蛇游戏管理多个线程更简单的替代方案。
至于代码,就这么简单:
while (1)
{
tb_clear();
draw(gameState);
tb_present();
struct tb_event event;
tb_poll_event(&event);
if (event.ch == 'q')
break;
}
深入研究头文件后,我发现了一种不会永远等待的方法。
/* 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);
我的 termbox 程序在渲染屏幕和处理键盘事件时遇到问题。最近,我在我的大学完成了 C 和 C++ class。我想通过创建一个基本的贪吃蛇游戏来展示我的知识。第一步,我想要一个简单的渲染循环,让一段文本简单地向左移动并在到达第 0 个 x 坐标时退出游戏。继续下一个渲染帧时会出现问题,因为游戏是 运行ning 单线程,在接受新的键盘事件之前不会渲染下一帧。通常,我希望游戏继续渲染,而不管事件,影响新帧的新事件。
至于可能的解决方案,我考虑过使用多线程 运行 游戏循环和处理键盘事件。但是,我认为这对于这么小的问题来说太过分了,可能有比为一个简单的贪吃蛇游戏管理多个线程更简单的替代方案。
至于代码,就这么简单:
while (1)
{
tb_clear();
draw(gameState);
tb_present();
struct tb_event event;
tb_poll_event(&event);
if (event.ch == 'q')
break;
}
深入研究头文件后,我发现了一种不会永远等待的方法。
/* 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);