C++ 和 SDL 一次在屏幕上显示的图像不能超过 3 张



我正在尝试制作一个屏幕键盘程序,其中当我按给定键时,它会在屏幕上显示一个图片,但是我发现当我按A,B,C,C以及D在我的键盘上完全出现,仅A,B和C出现。当我试图按不同的顺序按钥匙时,总会有一封没有出现的字母。我在网上没有发现任何回答我的问题。我的代码(目前我只检测到a,b,c和d):

Uint8 *key = SDL_GetKeyState(NULL);
SDL_Surface *alphabet = SDL_LoadBMP("keys/letters/alphabet.bmp");
SDL_Rect A;
A.x = 150;
A.y = 156;
A.w = 106;
A.h = 123;
SDL_Rect B;
B.x = 322;
B.y = 160;
B.w = 106;
B.h = 123;
SDL_Rect b;
b.x = 110;
SDL_Rect C;
C.x = 525;
C.y = 162;
C.w = 106;
C.h = 123;
SDL_Rect c;
c.x = 220;
SDL_Rect D;
D.x = 735;
D.y = 163;
D.w = 106;
D.h = 123;
SDL_Rect d;
d.x = 330;
while(running == true)
{
    SDL_PollEvent(&eventhandler);
    if(eventhandler.type == SDL_QUIT)
        running = false;
    SDL_FillRect(screen,NULL,0xFFFFFF);
    if(key[SDLK_a])
        SDL_BlitSurface(alphabet,&A,screen,NULL);
    if(key[SDLK_b])
        SDL_BlitSurface(alphabet,&B,screen,&b);
    if(key[SDLK_c])
        SDL_BlitSurface(alphabet,&C,screen,&c);
    if(key[SDLK_d])
        SDL_BlitSurface(alphabet,&D,screen,&d);
    SDL_Flip(screen);
}`

我可以肯定的是,这与硬件而不是软件有关,键盘不会比一次获得更多的输入。您可以使用sdl_event并在程序中打开/关闭布尔来控制每个按钮纹理。

,而不是使用键盘。

您需要在循环中查询事件,因为使用所使用的方法,即使在民意调查中有20个事件,您也只能获得一个事件只是在每个帧上弹出最后一个。

考虑将您的代码更改为此

SDL_Event evt;
while(SDL_PollEvent(&evt))
{
   //event handling here
}

并通过使用此

Uint8 *key = SDL_GetKeyState(NULL);

您需要在每个帧中为您提供钥匙台...不仅在开始时。您需要使用sdl_pumpevents更新数组。 假定Pollevent称为泵送。但是,我发现与使用键盘的阵列相比,我发现带有波力弹的循环是更好的解决方案。

最新更新