【问题标题】:SDL: Two Event Loops?SDL:两个事件循环?
【发布时间】:2011-07-26 03:48:34
【问题描述】:

在这里看看这段代码:

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

【问题讨论】:

  • 从不等待事件。让事件来找你。

标签: c++ sdl


【解决方案1】:

keyEvent 这个名称具有误导性。 SDL_WaitEvent 将等待任何类型的事件,包括 QUIT。

SDL_Event event;
SDL_WaitEvent(&event);
switch (event.type) {
    case SDL_QUIT:
        quit = true;
        break;
    /* cases for keyboard events, etc. */
}

【讨论】:

  • 是的,但问题是我无法访问 SDL_QUIT。我会打那个愚蠢的X,它不会退出。我必须在 VC++ 中停止它。
  • @Lemmons:不知道在 Windows 中是否有什么特别的事情要做,但我会感到惊讶。在 X11 中对我来说效果很好。
【解决方案2】:

最小的变化:

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

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

更好的变化:

重构您的代码,类似于网络上提供的许多示例(在 sourceforge,或在 molly Rocket,或者只是在谷歌上搜索)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多