SDL - SDL事件

3 篇文章 0 订阅

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;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值