SDL - SDL事件

SDL事件 

函數

         SDL_WaitEvent():  等待事件;

         SDL_PushEvent;  發送一個事件(事件入隊);

         SDL_PumpEvents(): 將硬件設備產生的事件放入事件隊列,用於讀取事件,在調用該函數前,必須調用SDL_PumpEvents蒐集鍵盤等事件;

         SDL_PeepEvents(): 從事件隊列提取一個事件

 

數據結構:

       SDL_Event:  事件結構體;

 

示例demo:


#include <SDL.h>
#include <iostream>

#define SDL_USER_DEF_QUIT_EVENT		(SDL_USEREVENT + 2)   //用戶自定義事件
int main(int argc, char* argv[])
{

	SDL_Window* window = nullptr;
	SDL_Init(SDL_INIT_VIDEO);

	window = SDL_CreateWindow(("Basic Window"),
		SDL_WINDOWPOS_UNDEFINED,
		SDL_WINDOWPOS_UNDEFINED,
		640,
		480,
		SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);

	if (!window)
	{
		std::cout << "Can't Create window, err:" << SDL_GetError() << std::endl;
		return 1;
	}
	//event
	SDL_Event event;
	int nExitCode = 0;

	while (true)
	{
		SDL_WaitEvent(&event);

		switch (event.type)
		{
		case SDL_KEYDOWN:			//鍵盤事件
			switch (event.key.keysym.sym)
			{
			case SDLK_a:
				std::cout << "key down a" << std::endl;
				break;
			case SDLK_b:
				std::cout << "key down b" << std::endl;
				break;
			case SDLK_c:
				std::cout << "key down c" << std::endl;
				break;
			case SDLK_d:
				std::cout << "key down d" << std::endl;
				break;
			case SDLK_q:
				std::cout << "key down q, ready to exit" << std::endl;
				SDL_Event eventQuit;
				eventQuit.type = SDL_USER_DEF_QUIT_EVENT;
				SDL_PushEvent(&eventQuit);			//自定義消息入隊
				break;
			
			default:
				printf("key down 0x%x\n", event.key.keysym.sym);
				break;
			}
			break;
		case SDL_MOUSEBUTTONDOWN:				//鼠標按下事件
			if (event.button.button ==  SDL_BUTTON_LEFT)
			{
				printf("mouse button down left\n");
			}
			else if (event.button.button == SDL_BUTTON_RIGHT)
			{
				printf("mouse button down right\n");
			}
			break;
		case SDL_USER_DEF_QUIT_EVENT:
			std::cout << "quit event received" << std::endl;
			nExitCode = 1;
			break;
		case SDL_MOUSEMOTION:
			printf("mosue move (%d, %d)\n", event.button.x, event.button.y);
			break;
		default:
			break;
		}
		if (nExitCode)
			break;
	}
	
	SDL_Delay(5000);
	SDL_DestroyWindow(window);
	SDL_Quit();

	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章