SDL_MouseButtonEvent 表现得像 SDL_MouseMotion
SDL_MouseButtonEvent is behaving like SDL_MouseMotion
我编写了一个应用程序,但从 SDL 得到了错误的输出。为了说明我的问题,我开发了一个简单的代码来计算鼠标的点击次数。我在 Windows.
上使用带有 GCC 编译器的 CodeBlocks
代码如下:
#include "SDL.h"
#include <stdio.h>
int main ( int argc , char *args[] )
{
SDL_Window *window = NULL ;
SDL_Renderer *render = NULL ;
SDL_Event event ;
int counter = 0 ;
SDL_Init ( SDL_INIT_EVERYTHING ) ;
window = SDL_CreateWindow ( "" , 0 , 0 , 400 , 400 , SDL_WINDOW_BORDERLESS ) ;
render = SDL_CreateRenderer ( window , -1 , SDL_RENDERER_ACCELERATED ) ;
// Putting white color over window
SDL_SetRenderDrawColor ( render , 255 , 255 , 255 , 255 ) ;
SDL_RenderClear ( render ) ;
SDL_RenderPresent ( render ) ;
counter = 0 ; //Reinitializing counter to 0
//Starting Input
while ( 3 )
{
SDL_PollEvent ( &event ) ;
if ( event.type == SDL_MOUSEBUTTONUP )
{
counter++ ;
}
else if ( event.type == SDL_KEYUP )
{
if ( event.key.keysym.sym == SDLK_ESCAPE )
{
break ;
}
}
}
// Actual Clicks = 2
printf("CLicks = %d" , counter );
return 0 ;
}
输出总是相当大且错误。样本输出张贴在
https://drive.google.com/open?id=0B2krxxnuHys0UzB3Q1d3MzJEVVU
SDL_PollEvent 在事件发生之前不会阻塞,而是 return 如果将事件数据写入给定结构则为 1,否则为 0。您忽略了这个值并从事件中读取数据;没有人说这个事件数据是有效的,尤其是第一次,因为它甚至没有被初始化。
检查 return 值并且仅在 SDL 所述事件确实发生时才使用事件。您还可以使用 SDL_WaitEvent
,它会阻塞直到事件发生。
我编写了一个应用程序,但从 SDL 得到了错误的输出。为了说明我的问题,我开发了一个简单的代码来计算鼠标的点击次数。我在 Windows.
上使用带有 GCC 编译器的 CodeBlocks代码如下:
#include "SDL.h"
#include <stdio.h>
int main ( int argc , char *args[] )
{
SDL_Window *window = NULL ;
SDL_Renderer *render = NULL ;
SDL_Event event ;
int counter = 0 ;
SDL_Init ( SDL_INIT_EVERYTHING ) ;
window = SDL_CreateWindow ( "" , 0 , 0 , 400 , 400 , SDL_WINDOW_BORDERLESS ) ;
render = SDL_CreateRenderer ( window , -1 , SDL_RENDERER_ACCELERATED ) ;
// Putting white color over window
SDL_SetRenderDrawColor ( render , 255 , 255 , 255 , 255 ) ;
SDL_RenderClear ( render ) ;
SDL_RenderPresent ( render ) ;
counter = 0 ; //Reinitializing counter to 0
//Starting Input
while ( 3 )
{
SDL_PollEvent ( &event ) ;
if ( event.type == SDL_MOUSEBUTTONUP )
{
counter++ ;
}
else if ( event.type == SDL_KEYUP )
{
if ( event.key.keysym.sym == SDLK_ESCAPE )
{
break ;
}
}
}
// Actual Clicks = 2
printf("CLicks = %d" , counter );
return 0 ;
}
输出总是相当大且错误。样本输出张贴在
https://drive.google.com/open?id=0B2krxxnuHys0UzB3Q1d3MzJEVVU
SDL_PollEvent 在事件发生之前不会阻塞,而是 return 如果将事件数据写入给定结构则为 1,否则为 0。您忽略了这个值并从事件中读取数据;没有人说这个事件数据是有效的,尤其是第一次,因为它甚至没有被初始化。
检查 return 值并且仅在 SDL 所述事件确实发生时才使用事件。您还可以使用 SDL_WaitEvent
,它会阻塞直到事件发生。