SDL和C键盘或触摸事件

时间:2016-06-13 11:10:48

标签: c sdl-2

我在c4droid中编程,但我无法使触摸事件发挥作用。 尝试切换或if语句,但没有任何工作,我确定渲染是好的,因为如果我删除开关,那么它通常呈现

这里是我的代码:

#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();
}

1 个答案:

答案 0 :(得分:1)

您需要确保轮询活动。

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)循环,将其放入其中。对不起,我可能应该在开始时更清楚一点。