我可以在不使用嵌入式while_loop的情况下使用SDL检查事件吗?
问题描述:
我最初使用glfw编写了我的游戏。然而,由于缺乏Android可移植性,我必须将所有的glfw代码替换为SDL,因为SDL更具可移植性。我可以在不使用嵌入式while_loop的情况下使用SDL检查事件吗?
我的原始游戏循环使用glfw框架工作非常紧张。这是它:
// game loop
while (!glfwWindowShouldClose(window)) {
//if-else statements that create
//the games state machine
//player input is received here
//rendering done here
}
好的。编写这个游戏循环可能有更好的方法,但重点在于游戏原型的代码。
但是现在,我正在切换到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的比赛,我在c写道:
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);
}
}
不应该'SDL_PollEvent()'循环只是处理事件?你的渲染代码应该在外面,在你的外部循环中......原样,当你处理一个事件时,你只渲染等...... – Dmitri