Windows で SDL2 を使用しています (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;
}