我编写了一个应用程序,但得到了SDL的错误输出。为了指定我的问题,我开发了一个简单的代码来计算鼠标的点击次数。我在Windows上使用CodeBlocks和GCC编译器。
代码如下:
#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 ;
}
输出始终是相当巨大的&amp;错误。样本输出发布在
https://drive.google.com/open?id=0B2krxxnuHys0UzB3Q1d3MzJEVVU
答案 0 :(得分:1)
SDL_PollEvent在事件发生之前不会阻塞,但如果将事件数据写入给定结构则返回1,否则返回0。无论如何,你忽略了这个值并从事件中读取数据;没有人说这个事件数据是有效的,特别是第一次,因为它甚至没有初始化。
检查返回值并仅在SDL表示事件确实发生时才使用事件。您也可以使用SDL_WaitEvent
,它会阻止直到事件发生。