2009年3月25日星期三

SDL学习

作者:Sam(甄峰) sam_code@hotmail.com

Sam在移植SDL时遇到一些问题,虽然解决了。但还是有点知其然,不知其所以然的感觉。主要原因是对SDL不熟悉造成的。所以抽空利用SDL的test程序学习一下SDL编程。


先看几个常用的structure:
1. SDL_Surface: Graphical Surface Structure
这个结构体实际上是给出了一个可以显示的Surface。其中包含了surface大小,bit_per_pixel,以及pixel data.
它通常是由SDL_SetVideoMode()创建。


以testsprite为例:
1.初始化Video
SDL_Init(SDL_INIT_VIDEO);

2.使用SDL_SetVideoMode()创建一个定制长宽,以及bit-per-pixel的surface。
screen = SDL_SetVideoMode(width, height, video_bpp, videoflags);
创建了一个Surface_A(背景 surface).

3. 使用SDL_LoadBMP()load 图像,并把数据存到一个SDL_Surface ---Surface_B(笑脸surface)中。

4. 使用SDL_DisplayFormat copy Surface_B到一个可以被快速显示的Surface_C(将要显示的笑脸surface)中。

5. 使用SDL_MapRGB()将Surface_A(背景 surface)的 format设置。

6. 使用SDL_BlitSurface()将Surface_C(将要显示的笑脸surface) 快速copy到Surface_A(背景 surface)的0,0位置,大小与Surface_C大小一致。

7. 使用SDL_FillRect()将Surface_A(背景 surface)刚才被copy的位置给盖起来了。Sam:等于没copy.

8. 在loop中:
8.1 首先使用SDL_FillRect()将Surface_A(背景 surface)重新用背景色填充。Sam:Erase

8.2 使用SDL_BlitSurface()将Surface_C(将要显示的笑脸surface) 快速copy到Surface_A(背景 surface)的某个位置(Rand)。

8.3 调用SDL_Flip()或者SDL_UpdateRects()重新画。

没有评论: