为什么SDL2提供的事件值不正确?

时间:2019-06-20 15:34:42

标签: c++ sdl-2 visual-studio-2019

我在VS2019 C ++中使用64位SDL2 v2.0.9-3。 SDL_PollEvent返回其类型字段包含不正确值的事件。返回的值是一致的,但是总是错误的!

我正在运行的代码可以与旧版本的库和VC编译器正常工作。我试过用VC2015构建具有相同结果。我也尝试过使用VCPKG版本并从头开始编译SDL2。结果总是一样。

这是我的代码(带有一些调试输出语句):

auto loop = true;
SDL_Event event;
long eventCounter = 0;

while (loop) {

    while (SDL_PollEvent(&event)) {

        std::wstringstream s;
        s << "Event " << eventCounter++ << ", Type: 0x" << hex << event.type << std::endl;
        OutputDebugString(s.str().c_str());

        if (event.type == SDL_QUIT)
            loop = false;

        if (event.type == SDL_KEYDOWN) {
            switch (event.key.keysym.sym) {
                case SDLK_ESCAPE:
                    loop = false;
                    break;

                case SDLK_SPACE:
                    DoSomething();
                    break;

                default:
                    break;
        }
    }
}

keydown返回0x10002(大于SDL_LASTEVENT的值-应该为0x300),keyup返回0x3(应该为0x301)。所有其他事件也是一致的,但是是错误的。有任何线索吗?

1 个答案:

答案 0 :(得分:0)

谢谢你立方!您的答复使我明白了这个问题。我在vcpkg中同时安装了SDL1和SDL2,因此,即使我包括正确的头文件,我的程序也显然已链接了SDL1库!我从vcpkg中删除了SDL1,问题消失了。

似乎他们应该能够在软件包管理器中共存,但我想不是。经验教训,vcpkg中没有同时安装SDL1和SDL2!