gpt4 book ai didi

c++ - 我可以在不使用嵌入式 while_loop 的情况下使用 SDL 检查事件吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:03 25 4
gpt4 key购买 nike

我最初使用 glfw 编写我的游戏。然而,由于它缺乏 android 的可移植性,我不得不用 SDL 替换我所有的 glfw 代码,因为 SDL 更具可移植性。

我使用 glfw 框架工作的原始游戏循环非常简单。在这里:

// game loop
while (!glfwWindowShouldClose(window)) {
//if-else statements that create
//the games state machine
//player input is received here
//rendering done here
}

好的。可能有更好的方法来编写这个游戏循环,但关键是为游戏原型(prototype)工作的代码。

但是现在我正在切换到 SDL,我遇到了一个问题。似乎必须将 SDL_Event 放入 while 循环中以不断检查事件。而这个 while_loop 在另一个 while_loop 中。所以我的代码看起来像这样:

while(!Quit) {
SDL_Event event;
while(SDL_PollEvent(&event)) {
//if-else statements that create
//the games state machine
//player input is received here
//rendering done here
}
}

然而,while_loop 中的 while_loop 完全搞乱了游戏渲染!我现在变得忽明忽暗了!有没有其他方法可以像我之前使用 glfw 那样在一个 while_loop 中表达这段代码。或者有什么方法可以在不使用嵌入式 while_loop 的情况下检查事件

最佳答案

渲染和计算不应在事件轮询循环内完成,而应在外部进行。

这就是我目前在 SDL2 中为我在 中编写的游戏所做的:

while (!quit) {
start_frame_ms = SDL_GetTicks();

/* Event polling */
while (SDL_PollEvent(&event)) {
joystick_event(&event);
keyboard_event(&event);
}

/* Calculations */
players_move();
enemies_move();

/* Rendering */
draw_sprites();

/* Lock FPS to 60 */
end_frame_ms = start_frame_ms - SDL_GetTicks();
if (end_frame_ms < FPMS) {
SDL_Delay(FPMS - end_frame_ms);
}
}

关于c++ - 我可以在不使用嵌入式 while_loop 的情况下使用 SDL 检查事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42229522/

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