将以下代码拷贝到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基础知识入门专题,或进入讨论组讨论。
分类:
SDL
, Game Development
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)