SDL 2, как использовать систему событий и рисовать асинхронно - PullRequest
0 голосов
/ 31 мая 2019

Вы можете использовать только систему событий и систему рисования, где она инициализирована, и они должны быть в одном потоке,

интересно, как система опроса дает результат, пока событие не сработает через

SDL_WaitEvent(&event);

Как бы я сказал, нарисовать что-то со скоростью 60 кадров в секунду, в то же время все еще будучи в состоянии принять ввод от пользователя?Я предполагаю, что есть событие таймера?Или вы даже не должны использовать SDL_WaitEvent ....

Хотите знать, как я должен структурировать свою игру

1 Ответ

1 голос
/ 31 мая 2019

Большинство игровых движков не требуют асинхронного рендеринга, обычно у вас есть цикл, в котором вы обновляете, а затем рендеринг (на практике у вас есть фиксированное количество обновлений и динамическое количество рендеров). SDL_WaitEvent блокируется и, вероятно, не то, что вы хотите. Вы, вероятно, хотите SDL_PollEvent , который не является блокирующим. Обычно вы продолжаете опрашивать события до тех пор, пока больше не будет событий.

Общий цикл выглядит примерно так:

void gameLoop()
{
    while(true)
    {
        update();
        render();
    }
}

и ваша функция обновления будет выглядеть как

void update()
{
    SDL_Event event;
    while(SDL_PollEvent(&event))
    {
        // Handle Event
    }
    // Other Update Logic
}

Это будет вызывать события опроса до тех пор, пока в очереди больше не будет, и в этот момент SDL_PollEvent вернет 0, завершив тем самым цикл обработки событий. Оттуда вы можете продолжить выполнять другую логику обновления, которая не зависит от системных событий.

...