(2)SDL::事件

1.01 事件
// main.cpp
#include <SDL.h>
#include <iostream>
#define MY_EVENT_TYPE 10000

int main(int argc, char* argv[]) {
    // 1. 初始化SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        std::cerr << "SDL 初始化失败: " << SDL_GetError() << std::endl;
        return -1;
    }

    // 2. 创建窗口
    SDL_Window* window = SDL_CreateWindow(
        "SDL2 入门",              // 窗口标题
        SDL_WINDOWPOS_CENTERED,   // X 位置(居中)
        SDL_WINDOWPOS_CENTERED,   // Y 位置
        800,                      // 宽度
        600,                      // 高度
        SDL_WINDOW_SHOWN          // 窗口标志
    );

    if (!window) {
        std::cerr << "窗口创建失败: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return -1;
    }

    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (!renderer) {
        std::cerr << "渲染器创建失败: " << SDL_GetError() << std::endl;
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
    }

    bool isquit = false;
    SDL_Event event;
    //自定义事件
    const char* eventName = "Custom event";
    SDL_Event myEvent;
    myEvent.type = MY_EVENT_TYPE;
    myEvent.user.data1 = (void*)eventName;
    SDL_PushEvent(&myEvent);

    while (!isquit)
    {
        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT) {
                isquit = true;
            }

            // 窗口事件
            if (event.type == SDL_WINDOWEVENT) {
                if (event.type == SDL_WINDOWEVENT_RESIZED)
                {
                    SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
                }
            }

            // 鼠标键盘滚轮事件
            if (event.type == SDL_KEYDOWN) {
                SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
            }
            if (event.type == SDL_KEYUP) {
                SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
            }
            if (event.type == SDL_MOUSEMOTION) {
                //SDL_Log("mouse button %d \n", event.button.button);
            }
            if (event.type == SDL_MOUSEWHEEL) {
                SDL_Log("wheel x = %d. y = %d \n", event.wheel.x, event.wheel.y );
            }

            int mouseX, mouseY;
            Uint32 button = SDL_GetMouseState(&mouseX, &mouseY);
            if ((button & SDL_BUTTON(SDL_BUTTON_LEFT)) && (button & SDL_BUTTON(SDL_BUTTON_RIGHT)))
            {
                SDL_Log("mouse left and right button down");
            }

            // 自定义事件
            if (event.type == MY_EVENT_TYPE) {
                SDL_Log("cache my event");
            }

        }

        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);  // RGBA
        SDL_RenderClear(renderer);

        SDL_RenderPresent(renderer);
    }

    // 4. 清理资源
    SDL_RenderPresent(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
posted @ 2019-06-01 14:55  osbreak  阅读(402)  评论(0)    收藏  举报