首页 > 解决方案 > 每次如何使用 SDL_KeyCode 处理按键?

问题描述

每当我按下右箭头键时,我都会尝试在新位置生成一个矩形,我能够获得第一个矩形,但现在卡在第二个矩形。由于这不是 SDL_GetKeyboardState 的情况(在连续按下键时移动矩形),我完全不知道应该如何进行。为矩形创建数组并将其传递给轮询事件?

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Window *window = NULL;
SDL_Surface *screen = NULL;
SDL_Renderer *renderer;
SDL_Event e;
SDL_Rect one, two;
bool quit = false;

void init(){
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("Testing", SDL_WINDOWPOS_UNDEFINED, 
                                               SDL_WINDOWPOS_UNDEFINED, 
                                               SCREEN_WIDTH, SCREEN_HEIGHT, 
                                               SDL_WINDOW_SHOWN);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    screen = SDL_GetWindowSurface(window);  
}

void draw(){
    SDL_SetRenderDrawColor(renderer,255, 255, 255, 255);
    SDL_RenderClear(renderer);

    SDL_SetRenderDrawColor( renderer, 255, 0, 0, 255);      
    SDL_RenderFillRect( renderer, &one);

    SDL_SetRenderDrawColor( renderer, 0, 66, 255, 255);     
    SDL_RenderFillRect( renderer, &two);

    SDL_RenderPresent(renderer);    
}


void logic(){
    Uint8 *state;
    while (SDL_PollEvent(&e) !=0) {
        if (e.type == SDL_KEYDOWN)
        {
            switch (e.key.keysym.sym)
            {
                case SDLK_RIGHT:
                    one = {2,2,124,124};
                    //two = {130,2,124,124};
                    break;
                    
                case SDLK_LEFT:
                    one = {0,0,0,0};
                    break;
            }
        }
        else if (e.type == SDL_QUIT)
        {
            quit = true;
        }
    }
}

int main(int argc, char* args[]){
    init();
    while (!quit)
    {
        logic();
        draw();
    }
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    renderer = NULL;
    window = NULL;
    SDL_Quit();
    return 0;
}

标签: c++sdlsdl-2

解决方案


推荐阅读