SDL:两个事件循环?

时间:2010-12-18 23:02:30

标签: c++ sdl

在这里看一下这段代码:

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 个答案:

答案 0 :(得分:3)

名称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 :(得分:1)

微小变化:

您可以在设置QUIT的内部while循环之后添加if (QUIT) break;

或者,您可以将外部while循环移动到单独的函数,并在return;之后添加QUIT = true;

更好的改变:

重构您的代码,类似于网上提供的许多示例(在sourceforge,或者在molly rocket,或者只是google)。