C++ SDL2 Получить координаты мыши без задержки

Я делаю 2D-шутер с высоты птичьего полета с помощью C++, используя библиотеку SDL2 в Code::Blocks, скомпилирован с помощью MinGW и работает в Windows 7.

Все идет гладко, но я столкнулся с одной серьезной проблемой и не смог найти рабочего решения. Будучи шутером, мышь задействована ОЧЕНЬ МНОГО, но я никогда не могу вернуть положение мыши точно в нужный кадр... Всегда кажется, что она отстает примерно на 2-5 кадров.

Например, мне нужно, чтобы изображение перекрестия всегда было на (невидимой) мыши. Я знаю, что мог бы просто использовать одну из функций мыши, например CreateCursor, но мне все равно нужны точные координаты, чтобы цель не сбивалась. Я использую базовый скрипт, подобный этому:

bool quit = false;
SDL_Event e;
int xMouse, yMouse;

while(quit == false)
{
    while(SDL_PollEvent(&e) != 0)
    {
        if(e.type == SDL_MOUSEMOTION)
        {
            SDL_GetGlobalMouseState(&xMouse,&yMouse);
        }
    }
}

Теперь, если бы у меня было изображение перекрестия, визуализируемое в точке (xMouse-10, yMouse-10) (используется вычитание для исходной точки), оно всегда будет отставать от курсора. Кроме того, координатам потребуется пара кадров, чтобы перестать двигаться после того, как мышь уже перестала двигаться.

Предложите мне лучший метод точного отслеживания мыши.

P.S. Я довольно новичок в C++ и SDL, так что давайте разные советы, если хотите.


person BSasuke    schedule 07.08.2014    source источник
comment
Какую ОС вы используете? Это может быть связано с этим если вы используете Windows 8.0.   -  person Stian Svedenborg    schedule 07.08.2014
comment
Пробовали ли вы вызывать SDL_GetGlobalMouseState(&xMouse,&yMouse); без проверки события SDL_MOUSEMOTION? Так что просто получайте положение мыши при каждом выполнении вашего основного цикла и проверяйте, решает ли это проблему.   -  person lmNt    schedule 07.08.2014
comment
@lmNt Я пробовал это, все еще задержка.   -  person BSasuke    schedule 08.08.2014


Ответы (1)


Это немного далеко, но в моем проекте Linux SDL2 у меня было похожее отставание мыши, которое было вызвано установкой флага SDL_RENDERER_PRESENTVSYNC в моем модуле визуализации. Удаление этого флага устранило отставание. Может стоит попробовать.

person pdw    schedule 10.08.2014