Я делаю 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, так что давайте разные советы, если хотите.
SDL_GetGlobalMouseState(&xMouse,&yMouse);
без проверки события SDL_MOUSEMOTION? Так что просто получайте положение мыши при каждом выполнении вашего основного цикла и проверяйте, решает ли это проблему. - person lmNt   schedule 07.08.2014