Почему SDL2 предоставляет неверные значения событий? - PullRequest
1 голос
/ 20 июня 2019

Я использую SDL2 v2.0.9-3, 64 бит, с VS2019 C ++. 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 голосов
/ 20 июня 2019

Спасибо, кубик!Ваш ответ дал мне понять проблему.У меня были оба SDL1 и SDL2, установленные в vcpkg, так что, хотя я включал правильные заголовочные файлы, моя программа, очевидно, получала связанную библиотеку SDL1!Я удалил SDL1 из vcpkg и проблема ушла.

Казалось бы, они должны быть в состоянии сосуществовать в менеджере пакетов, но я думаю, что нет.Извлеченный урок, не устанавливайте SDK1 и SDL2 в vcpkg!

...