C ++ и SDL не могут получить более 3 изображений на экране одновременно

0

Я пытаюсь сделать программу экранной клавиатуры, в которой, когда я нажимаю данную клавишу, изображение на экране появляется на экране, но я обнаружил, что когда я нажимал A, B, 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);
}'
  • 4
    Со многими клавиатурами вы не можете вводить более 3 клавиш одновременно. Это называется призраком .
Теги:
image
keyboard
sdl

2 ответа

0

Вам нужно запросить свое событие в цикле, потому что с помощью метода, который вы используете, вы получаете только одно событие за кадр, даже если в опросе есть 20 событий, вы просто добавляете последний в каждый кадр.

Подумайте о том, чтобы изменить свой код на этот

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

И используя это

Uint8 *key = SDL_GetKeyState(NULL);

Вам нужно получить кайаст в каждом кадре... Не только в начале. Для обновления массива необходимо использовать SDL_PumpEvents. Попытка PumpEvents должна быть вызвана PollEvent. Но я нашел цикл с PollEvent лучшим решением, чем использование массива KeyboardState.

0

Я вполне уверен, что это связано с аппаратным программным обеспечением, клавиатура просто не получит больше ввода, чем в одно время. Вместо использования keystates вы можете использовать SDL_Event и включить/выключить bools в программе для управления каждой текстурой кнопок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню