我昨天开始学习SDL库,经过一些阅读和询问后,制作了一个非常简单的程序,当左键按下时绘制一个 block 。
问题在于,当鼠标快速移动时,它会跳过点,因此您得到的是一堆方 block 而不是一条线,下面的屏幕截图显示了以常规速度移动鼠标的一条线和快速移动鼠标时的一条线:
是什么导致它跳过所有这些点?
代码如下:
//keep the window open
while(running){
//handle events
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_MOUSEBUTTONDOWN:
//left button down draws black block
if(event.button.button == SDL_BUTTON_LEFT) boxColor = black;
//right button "erases" a point
else
if(event.button.button == SDL_BUTTON_RIGHT) boxColor = blue;
//middle button clears the screen
else {
clearScreen(display,blue);
break;
}
//where to draw
drawing = 1;
boxRect.x = event.button.x - BOX_WIDTH / 2;
boxRect.y = event.button.y - BOX_HEIGHT / 2;
break;
case SDL_MOUSEMOTION:
//keep drawing if the button is pressed
if(drawing == 1){
boxRect.x = event.motion.x - BOX_WIDTH / 2;
boxRect.y = event.motion.y - BOX_HEIGHT / 2;
}
break;
//stop drawing when the button is no longer pressed
case SDL_MOUSEBUTTONUP:
drawing = 0;
break;
//quit if window closing button is pressed
case SDL_QUIT:
running = 0;
break;
}
}
//draw
if(drawing == 1){
SDL_FillRect(display,&boxRect,boxColor);
SDL_Flip(display);
}
}
最佳答案
因为系统实际上并没有以连续流的形式获取点,所以它必须轮询鼠标位置。这意味着如果您移动鼠标太快,两次民意调查之间的差异将足够大,从而产生差距。
关于c - 为什么这段代码在快速移动鼠标时会跳过点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146276/