将以下代码拷贝到main.cpp并保存。
#include <stdlib.h> #if defined(_MSC_VER) #include "SDL.h" #else #include "SDL/SDL.h" #endif SDL_Surface *screen; void render() { // 独占资源,将surface 锁定 if (SDL_MUSTLOCK(screen)) if (SDL_LockSurface(screen) < 0) return; // 获取当前时间,以毫秒计时 int tick = SDL_GetTicks(); // 声明变量 int i, j, yofs, ofs; // 对窗口进行绘制 yofs = 0; for (i = 0; i < 480; i++) { for (j = 0, ofs = yofs; j < 640; j++, ofs++) { ((unsigned int*)screen->pixels)[ofs] = i * i + j * j + tick; } yofs += screen->pitch / 4; } // 解除锁定 if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); // 使用SDL对窗口进行更新 SDL_UpdateRect(screen, 0, 0, 640, 480); } // Entry point int main(int argc, char *argv[]) { // 初始化SDL子系统,这里只对视频进行初始化 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Unable to init SDL: %s"n", SDL_GetError()); exit(1); } // 注册SDL_Quit,当退出时调用,使得退出时程序自动清理 atexit(SDL_Quit); // 使用32位象素创建640x480的窗口 screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); // 若失败,则退出 if ( screen == NULL ) { fprintf(stderr, "Unable to set 640x480 video: %s"n", SDL_GetError()); exit(1); } // 主循环 while (1) { // Render stuff render(); // SDL中的事件轮询机制 SDL_Event event; while (SDL_PollEvent(&event)) { //对消息进行处理 switch (event.type) { // 如果按下某键的消息响应 case SDL_KEYDOWN: break; //如果某键按下后弹起的消息响应 case SDL_KEYUP: //若按下ESC键,则退出 if (event.key.keysym.sym == SDLK_ESCAPE) return 0; break; //退出消息响应 case SDL_QUIT: return(0); } } } return 0; } |
对工程gp进行编译,可以看看动态水波纹的效果了:) 如图10所示。
如果你能够看到图10中的美丽动态窗口,那么恭喜你,你可以开始漫游SDL的精彩世界了。下面我们将正式开始我们的SDL之旅。 更多内容请看游戏开发、网络游戏攻略、Solaris基础知识入门专题,或进入讨论组讨论。