Mag*_*ler 0 c c++ sdl glfw game-loop
我最初使用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
}
Run Code Online (Sandbox Code Playgroud)
好。编写此游戏循环可能有更好的方法,但重点是适用于游戏原型的代码。
但是,现在我切换到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
}
}
Run Code Online (Sandbox Code Playgroud)
但是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);
}
}
Run Code Online (Sandbox Code Playgroud)