gpt4 book ai didi

c++ - allegro 5 以特定间隔执行事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:11 26 4
gpt4 key购买 nike

我正在用 allegro 5 制作我的第一款游戏,这是一款贪吃蛇游戏。为了移动蛇游戏,我想使用我制作的方形网格,这样蛇会定期移动。

如何使用计时器让事件在特定时间发生?

例如,我想让我的蛇在设定的方向上每秒移动一次,我知道如何控制他但我不知道如何创建一个以特定间隔发生的事件。我在 Windows XP SP3 中使用 Codeblocks IDE

最佳答案

大多数使用 Allegro 创建游戏的人都使用固定间隔计时系统。这意味着每秒 X 次(通常为 60 或 100),您处理输入并运行逻辑循环。然后,如果还有时间,您可以绘制一帧图形。

创建一个以 60 FPS 计时的计时器并将其注册到事件队列:

ALLEGRO_TIMER *timer = al_create_timer(1 / 60.0);
ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue();

al_register_event_source(queue, al_get_timer_event_source(timer));

现在在你的主事件循环中的某个地方:

al_start_timer(timer);
while (playingGame)
{
bool draw_gfx = false;

do
{
ALLEGRO_EVENT event;
al_wait_for_event(queue, &event);

if (event.type == ALLEGRO_EVENT_TIMER)
{
do_logic();
draw_gfx = true;
}
else if (event.type == ... )
{
// process keyboard input, mouse input, whatever
// this could change the direction the snake is facing
}
}
while (!al_is_event_queue_empty(queue));

if (draw_gfx)
{
do_gfx();
draw_gfx = false;
}
}

所以现在在 do_logic() 中,您可以将蛇朝它所面对的方向移动一个单位。这意味着它每秒移动 60 个单位。如果您需要更多粒度,可以使用小数单位。

您可能想看一下 Allegro 附带的一些演示,因为它们具有完整的事件循环功能。作为一个单一的 SO 答案包括在内太多了。

关于c++ - allegro 5 以特定间隔执行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com