基本是对所学的总结,并且内容东拼西凑。
SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。
SDL的安装不用多说了,到处都有讲。
SDL_Init();
SDL初始化函数,里面主要是初始化内存等。
SDL为我们提供了两种等待事件的方式:
int SDL_WaitEvent(SDL_Event *event); int SDL_PollEvent(SDL_Event *event);
嗯,其中SDL_Event是对OS相关的事件结构体的再封装。。一般来说系统应该只有一个消息队列,但是对于模态对话框就需要新的消息队列来覆盖原来的消息队列了。
SDL_Surface *SDL_SetVideoMode(int width, int height, int bitsperpixel, Uint32 flags);
恩,这个函数是创建一个内存FB或者硬件FB。。SDL_Surface代表了这个FB的内容。需要注意的是系统中真实的显示FB只能有一个,但是需要其他的来用于缓存显示。显示的时候先SDL_BlitSurface将其他FB赋给显示FB ,然后SDL_Flip即显示就OK了。
需要注意的是硬件加速问题,必须利用双缓冲,否则会有问题,什么问题?会出现撕裂效果。。。。。。。反正很不爽。另外需要注意在硬件加速下,不能直接访问到FB,因为没有权利。。。。。。。。。。。。还要注意SDL_Surface的深入复制问题。小心出错。
另外可以看看SDL_Surface结构体里面有一个SDL_PixelFormat *format;成员。我们一般会选择使用作为被抠色的矩形图片的颜色格式。
如果要显示文本,就使用用*.ttf文件,据我所知,freetype不错。。。 有机会还要深入研究一下。
感觉SDL的错误处理机制是学习了 MS的 getlasterror 机制。。。。。。。大家认为呢。
SDL_LoadBMP(char*)
没什么好说的就是加载图片,看看BMP图片格式就行了。这是最简单的图片格式,一般加载16或者32位色的。
一个界面离不开按钮等控件,我要说的就是不管是什么控件,你就按着要求画图就行了,状态改变的时候再重新画图或者对控件指定区域画图,其实不是画图,是画FB。。。。。。。。。。。。。所以呢,所有控件都是对用户而言的,对程序而言只有图片和敏感区域而已。判断鼠标区域而已,程序麻烦一点罢了但是不难。
多线程,还真没有什么好说的,和一般的一样用就行了。对了,要注意工作者线程和UI线程。。。。只有UI线程才处理事件。
SDL的网络功能还比较弱。就先不说了。
写的非常简陋,有机会我慢慢深入
10.1.31