SDL_MouseButtonEvent的行为类似于SDL_MouseMotion

时间:2017-02-15 15:03:57

标签: c++ c graphics 2d sdl

我编写了一个应用程序,但得到了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

1 个答案:

答案 0 :(得分:1)

SDL_PollEvent在事件发生之前不会阻塞,但如果将事件数据写入给定结构则返回1,否则返回0。无论如何,你忽略了这个值并从事件中读取数据;没有人说这个事件数据是有效的,特别是第一次,因为它甚至没有初始化。

检查返回值并仅在SDL表示事件确实发生时才使用事件。您也可以使用SDL_WaitEvent,它会阻止直到事件发生。