SDL2程序使用事件崩溃

时间:2015-11-17 16:59:59

标签: c++ input sdl-2

正如标题所说,我在处理SDL2中的事件时遇到了崩溃程序的问题。

我处理这样的事件:

const Uint8 *key_buttons;

SDL_Event e;

while (SDL_PollEvent(&e))
{
  switch(e.type)
  {
    case SDL_QUIT:
      running = false;
      break;

    case SDL_KEYDOWN:
      key_buttons = SDL_GetKeyboardState(0);
      break;   

    case SDL_KEYUP:
      key_buttons = SDL_GetKeyboardState(0);
      break; 
  }
}

然后,当我调用此函数时:

bool Get_KeyButtonState(SDL_Scancode key)
{
  if (!key_buttons)
    return false;

  if (key_buttons[key])
    return true;
  else
    return false;
}

我的程序崩溃。

如果我在while循环开始时调用SDL_GetKeyboardState()并停止使用SDL_KEYDOWNSDL_KEYUP,那么我的程序就可以运行。

所以,我的问题是:它为什么会发生以及什么是正确的解决方案?而且,还有一种方法可以处理只需更改状态而无需保存所有按钮的先前状态(因为我找不到任何功能)?

由于

1 个答案:

答案 0 :(得分:0)

解决方案只是给出一个初始的 NULL:

const Uint8 *key_buttons = NULL; // or 0

这可确保您的 if (!key_buttons) return false; 在所有情况下都能正常工作。

顺便说一句,const 令人困惑。在这种情况下,它意味着“指针指向的值”是不可变的,但“指针本身”是可变的。