[英]Can I check for events with SDL without using an embedded while_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
}
好。 編寫此游戲循環可能有更好的方法,但重點是適用於游戲原型的代碼。
但是,現在我切換到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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.