我正在尝试制作一个屏幕键盘程序,其中当我按给定键时,它会在屏幕上显示一个图片,但是我发现当我按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称为泵送。但是,我发现与使用键盘的阵列相比,我发现带有波力弹的循环是更好的解决方案。