`
kukuqiu001
  • 浏览: 210334 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

整合sdl的定时器及事件机制的样例

sdl 
阅读更多
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库.有利于多媒体及游戏的开发,具体详见维基百科:http://zh.wikipedia.org/wiki/SDL
此样例是对sdl事件机制和定时器的简单整合, 自ffmpeg的tutorial04.c了解的

你需要先安装sdl
编译,生成: gcc -o testevent2 testevent2.c  `sdl-config --cflags --libs`
#include "SDL.h"

#include <stdio.h>
#include <time.h>

#define FF_0_EVENT   (SDL_USEREVENT)
#define FF_1_EVENT (SDL_USEREVENT + 1)
#define FF_2_EVENT (SDL_USEREVENT + 2)
#define FF_3_EVENT (SDL_USEREVENT + 3)
#define FF_4_EVENT (SDL_USEREVENT + 4)

#define random(x) (rand()%x)

static Uint32 sdl_refresh_timer_cb(Uint32 interval, void *opaque) {
	
	SDL_Event event;
	srand((int)time(0));
	int ffrand;
	ffrand = random(5);
	printf("ffrand = %d \n", ffrand);
	
	switch (ffrand) {
			case 0:
			    event.type = FF_0_EVENT;
				break;
			case 1:
				event.type = FF_1_EVENT;
				break;
			case 2:
				event.type = FF_2_EVENT;
				break;
			case 3:
				event.type = FF_3_EVENT;
				break;
			case 4:
				event.type = FF_4_EVENT;
				break;
			default:
				break;
		}
	SDL_PushEvent(&event);
	return interval; /* 0 means stop timer */
}


static void schedule_refresh(int delay) {
	SDL_AddTimer(delay, sdl_refresh_timer_cb, NULL);
}

int main(int argc, char *argv[]) {
	
	SDL_Event       event;
	if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
		fprintf(stderr, "Could not initialize SDL - %s\n", SDL_GetError());
		exit(1);
	}
	
	schedule_refresh(1000);
	
	while(1) {
		SDL_WaitEvent(&event);
		
		switch(event.type) {
			case FF_0_EVENT:
				printf("0 \n");
				break;
			case FF_1_EVENT:
				printf("1 \n");
				break;
			case FF_2_EVENT:
				printf("2 \n");
				break;
			case FF_3_EVENT:
				printf("3 \n");
				SDL_Quit();
				return 0;
				break;
			case FF_4_EVENT:
				printf("4 \n");
				break;
			default:
				break;
		}
	}
	
	return 0;
}


notice:
1, SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)
sdl初始化一定要全部初始化,如果仅仅初始化SDL_INIT_TIMER, 事件机制将不起任何作用
因为sdl_event的有mouse,key等界面元素
分享到:
评论

相关推荐

    播放器开发 2.7.7第五章 多线程架构实现SDL定时器

    播放器开发 2.7.7第五章 多线程架构实现SDL定时器

    DevOps整合SDL落地的两难选_择:效率_vs_安全.pdf

    敏捷和DevOps给安全工作带来的冲击 安全工作在敏捷转型路上的障碍 更加安全和更高效率之间的矛盾 ...DevSecOps给SDL带来的高效实践 左移到需求的安全工作如何保证全程高效 安全工作的敏捷DevOps之旅

    FFmpegSDL 音视频开发 ③ ( SDL 事件处理 )

    【FFmpeg】SDL 音视频开发 ③ ( SDL 事件处理 | SDL_Event 数据结构分析 | 事件处理流程 | SDL 事件获取函数 | SDL_WaitEvent 函数 ) https://hanshuliang.blog.csdn.net/article/details/139669401 博客源码快照 一...

    SDL_Event.rar_event_sdl_event_sdl点击事件

    在游戏开发或者图形界面编程中,SDL(Simple DirectMedia Layer)是一个非常流行的开源库,它为开发者提供了在多个操作系统上创建动态图形和处理用户...通过实践和参考`SDL_Event_Test`,可以加深对这一机制的理解。

    SDL库及源码.rar

    6. **定时器与事件驱动**:SDL提供精确的定时器功能,可以用于游戏循环或动画帧率控制。其事件驱动模型使程序能有效地响应用户操作和系统事件。 7. **网络通信**:虽然SDL本身并不包含完整的网络库,但可以与第三方...

    SDL2系列教程4-事件处理测试例程

    SDL Event事件循环 大多数多媒体程序依靠事件系统来处理输入。SDL为处理输入事件提供了灵活的API。本质上,SDL将来自设备(如键盘,鼠标或控制器)的输入记录为事件,将它们存储在“事件队列”中。您可以将此结构视...

    SDL.rar_sdl_sdlref pdf_sdl中文教程_sdl教程_怎样学sDL画图

    3. **事件处理**:在SDL中,事件处理是游戏循环的关键部分。你会学习如何监听键盘、鼠标和其他输入设备的事件,以及如何响应这些事件。 4. **图像加载与渲染**:SDL允许加载和显示各种图像格式,如BMP、PNG等。教程...

    qt 上实现SDL 功能

    8. **整合事件循环**:Qt和SDL都有各自的事件处理机制。你需要将两者整合,使得在处理Qt事件的同时,也能响应SDL的事件,如键盘输入、鼠标点击等。 9. **清理资源**:在应用程序退出之前,记得调用`SDL_Quit()`来...

    sdl.rar SDL2-2.0.14 SDL源码

    9. **事件系统**:SDL2有一套完整的事件处理机制,可以监听窗口、输入设备、时间等各类事件,是实现用户交互的基础。 10. **网络支持**:虽然不常用,但SDL2也提供了一些基础的网络功能,可以用来实现基于网络的...

    SDL游戏开发经典教程03源代码

    通过这个教程,你将深入理解SDL事件处理机制,这对于任何使用SDL开发的游戏至关重要。实践这些源代码,不仅可以提升你的编程技巧,还能让你更好地理解游戏如何响应用户的实时操作。继续学习和实践,你将能够创建出更...

    SDL Game Development 源码_基于SDL2.0

    1. **SDL基础知识**:SDL的核心功能包括窗口管理、图像渲染、音频处理、事件处理和定时器。它提供了跨平台的API,使得开发者可以编写一次代码,在Windows、Linux、Mac OS X及Android等平台上运行。 2. **窗口管理**...

    SDL2帮助文档(离线版)

    7. **定时器**:通过`SDL_GetTicks`和`SDL_Delay`函数,开发者可以实现时间控制,用于游戏循环或计时事件。 **SDL2 API函数详解** 1. `SDL_Init`:初始化SDL系统,通常在程序开始时调用,接受一个标志位参数,用于...

    带线程和事件的SDL播放器

    6. **事件循环**:持续监听并处理SDL事件队列,执行相应的动作,如播放控制、窗口管理等。 7. **内存管理**:正确地分配和释放内存,避免内存泄漏。 8. **错误处理**:捕捉和处理可能出现的异常情况,提供友好的错误...

    freetype2+SDL+SDL_ttf源码包及字符串转bmp图片demo

    SDL提供了窗口管理、事件处理、定时器、键盘和鼠标输入等功能。 **SDL_ttf** 是SDL的一个扩展库,专门用于处理TrueType字体。它利用freetype2的功能,为SDL应用添加了方便的文本渲染接口。通过SDL_ttf,开发者可以...

    SDL2.0.3源码安装包

    它包括了窗口管理、事件处理、图像渲染、音频播放、视频播放、文件I/O、定时器等功能。 2. **Linux环境下的图形编程**:在Linux系统中,开发者通常需要直接操作X Window System或Wayland等窗口系统来实现图形界面,...

    sdl基础教程 终极版

    2. **事件控制编程**:在SDL第三课中,会介绍如何处理用户输入事件,如键盘、鼠标和窗口事件。这是游戏和其他交互式应用程序的基础,通过事件循环来响应用户的操作。 3. **色彩键控**:SDL第4课讲解了色彩键控技术...

    SDL_ttf-2.0.8.tar.gz_SDL ttf_SDL_ttf_linux_linux SDL_ttf.h

    总结来说,SDL_ttf-2.0.8是Linux平台上进行图形界面开发的得力工具,它的TrueType字体处理能力、与SDL库的整合,以及丰富的定制选项,都极大地提升了开发效率和用户体验。对于任何希望在Linux环境中创建具备美观文本...

    SDL2_SDL2_SDL2_

    5. **事件处理**:SDL2 提供了一个事件驱动的系统,可以监听键盘、鼠标、触摸屏等输入设备的事件,用于实现用户交互。 6. **文件系统操作**:虽然不是核心功能,但 SDL2 提供了一些简单的文件读写接口,方便你在...

    SDL-1.3 SDL.lid SDL.dll SDL.h

    8. **开发示例**: 使用SDL开发通常涉及初始化、窗口创建、渲染、事件处理等步骤。例如,初始化SDL库的代码可能如下: ```cpp #include "SDL.h" int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_...

    SDL 2 参考手册英文版 SDL 2 Reference Manual-2015.11

    7. **事件处理**:`SDL_PollEvent`或`SDL_PeepEvents`用于检查并处理事件队列,如键盘输入、鼠标移动、窗口事件等。`SDL_Event`结构体包含各种事件类型,如`SDL_QUIT`、`SDL_KEYDOWN`、`SDL_MOUSEMOTION`。 8. **...

Global site tag (gtag.js) - Google Analytics