簡體   English   中英

是否可以在不使用嵌入式while_loop的情況下使用SDL檢查事件?

[英]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中為用編寫的游戲所做的工作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM