SDL 和 C 键盘或触摸事件

SDL and C keyboard or touch event

我正在用 c4droid 编程,但我无法让触摸事件起作用。 尝试了 switch 或 if 语句,但没有任何效果我确定渲染是好的,因为如果我删除 switch 那么它会正常渲染

我这里是代码:

#include <SDL2/SDL.h>

int main()
{
    SDL_Window *window = NULL;
    window = SDL_CreateWindow("Shooter", SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);

    // Setup renderer
    SDL_Renderer *renderer = NULL;
    renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED);

    // Set render color to red ( background will be rendered in this color )
    SDL_SetRenderDrawColor(renderer, 0, 255, 25, 255);

    // Clear winow
    SDL_RenderClear(renderer);

    // Creat a rect at pos ( 50, 50 ) that's 50 pixels wide and 50 pixels
    // high.
    SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
    SDL_Rect r;
    r.x = 500;
    r.y = 500;
    r.w = 50;
    r.h = 50;
    SDL_Rect e;
    e.x = 5;
    e.y = 5;
    e.w = 50;
    e.h = 50;
    SDL_Event event;

    while(SDL_PollEvent(&event) != 0) {
        switch (event.type) { 
        case SDL_FINGERDOWN : 
            e.x = e.x + 10;
            SDL_RenderFillRect(renderer, &r);    
            SDL_RenderFillRect(renderer, &e); 
            SDL_RenderPresent(renderer); 
            break; 
        } 
    }
    // Wait for 5 sec
    SDL_Delay(50000);

    SDL_DestroyWindow(window);
    SDL_Quit();
}

您需要确保对事件进行轮询。

while(true) {
    while(SDL_PollEvent(&event) != 0) {
        switch (event.type) {

        case SDL_FINGERDOWN :
            e.x = e.x + 10;
            SDL_RenderFillRect(renderer, &r);
            SDL_RenderFillRect(renderer, &e);
            SDL_RenderPresent(renderer);

            break;
        // Render rect
        }
    }
}

如果事件不为 NULL,SDL_PollEvent 将从队列中取出下一个事件并将其存储在事件指向的 SDL_Event 中。

编辑:不要删除 while(true) 循环,将其放入其中。对不起,我一开始可能应该更清楚一点。