SDL: два цикла событий? - PullRequest
       5

SDL: два цикла событий?

1 голос
/ 19 декабря 2010

Посмотрите на этот кусок кода здесь:

void game::startLoop()
{
 while(QUIT == false)
 {
  getRoomUpdate();
  applySurface(-15, 280, zombie_lefthand, buffer);
  applySurface(455, 280, zombie_righthand, buffer);

  SDL_Flip(buffer);

  while(SDL_PollEvent(&gameEvent))
  {
   if(gameEvent.type == SDL_QUIT)
   {
    QUIT = true;
   }
  }

  while(SDL_WaitEvent(&keyEvent))
  {
   switch(keyEvent.type)
   {
    case SDL_KEYDOWN:
    switch(keyEvent.key.keysym.sym)
    {
     //blahkeypress
    }
   }
  }
 }
}

Я пытаюсь выяснить, как разрешить SDL_QUIT работать, пока мы ждем нажатия клавиши. Есть ли способ сделать это, или у вас, ребята, есть идея получше?

Я немного новичок, поэтому, пожалуйста, будьте конкретны. : D

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Имя keyEvent вводит в заблуждение.SDL_WaitEvent будет ожидать любого события, включая QUIT.

SDL_Event event;
SDL_WaitEvent(&event);
switch (event.type) {
    case SDL_QUIT:
        quit = true;
        break;
    /* cases for keyboard events, etc. */
}
1 голос
/ 25 июля 2011

Минимальные изменения:

Вы можете добавить if (QUIT) break; после внутреннего цикла while, который устанавливает QUIT.

Или вы можете переместить внешний цикл while в отдельную функцию и добавить return; после QUIT = true;.

Улучшенные изменения:

Рефакторинг вашего кода аналогично многим примерам, доступным в Интернете (в sourceforge, или в Молли Ракет, или просто в Google).

...