Я использую SDL2 в Windows (я тестировал Windows 7 и Windows 8). Я играл с рендерингом текстуры, привязанной к координатам мыши, чтобы создать своего рода эффект «перекрестия».
Это работает, но текстура заметно отстает от мыши, что создает неудобную задержку между движением мыши и отображаемыми обновлениями. Честно говоря, задержка очень незначительна, но для того, кто заботится об абсолютной точности, она сведет с ума.
Мой вопрос в основном, это нормально? Я предполагаю, что задержка связана со временем, которое требуется Windows для доставки события в SDL, а затем SDL для доставки события мне. Как можно добиться эффекта заблокированного «перекрестия» с помощью SDL?
Мой код для справки:
#include "SDL.h"
int main( int argc, char* args[] )
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_Window* window = SDL_CreateWindow("SDL", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Surface* surface = SDL_LoadBMP("mouse.bmp");
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
SDL_FreeSurface(surface);
bool isExiting = false;
int x = 0;
int y = 0;
while(!isExiting)
{
SDL_Event e;
while(SDL_PollEvent(&e))
{
if(e.type == SDL_QUIT)
{
isExiting = true;
break;
}
else if(e.type == SDL_MOUSEMOTION)
{
x = e.motion.x;
y = e.motion.y;
}
}
SDL_Rect destRect;
destRect.h = 19;
destRect.w = 19;
destRect.x = x;
destRect.y = y;
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &destRect);
SDL_RenderPresent(renderer);
}
SDL_Quit();
return 0;
}
while
всегда занимает ~ 16-17 мс для выполнения? - person genpfault   schedule 04.09.2013SDL_Surface
не будет отрисовываться по центру позиции мыши, измените наdestRect.x = x - ( destRect.w / 2); destRect.y = y - ( destRect.h / 2);
- person olevegard   schedule 05.09.2013SDL_RENDERER_PRESENTVSYNC
, но, похоже, это не имеет значения. - person Justin Skiles   schedule 05.09.2013SDL_Delay()
для дросселирования основного цикла. Если вы загружаете ЦП, планировщик переключает вашу программу на более низкий приоритет. - person Quentin   schedule 09.06.2015