5.0 KiB
5.0 KiB
好,这个需求很清晰 👍 我给你一个**「思维导图式的表格」,不是 API 堆砌,而是模块层级 + 你写程序时的心智模型**。 你可以直接照着这个结构去“脑内导航”SDL。
SDL 模块思维导图(表格版)
① 总体结构(一眼版)
| 层级 | 模块 | 核心对象 | 你在干嘛 |
|---|---|---|---|
| 初始化层 | Core | SDL_Init | 启动 SDL |
| 系统层 | Video | SDL_Window | 创建窗口 |
| 渲染层 | Render | SDL_Renderer | 画东西 |
| 资源层 | Surface / Texture | SDL_Surface / SDL_Texture | 管理图像 |
| 事件层 | Events | SDL_Event | 处理输入 |
| 输入层 | Keyboard / Mouse | Scancode / Button | 拿键盘鼠标 |
| 时间层 | Timer | Uint32 ticks | 控帧率 |
| 扩展层 | GL / Vulkan | Context / Surface | 硬件加速 |
| 退出层 | Cleanup | SDL_Quit | 善后 |
② 模块级思维导图(展开版)
🧠 SDL 核心(启动 / 关闭)
| 模块 | 关键函数 | 说明 |
|---|---|---|
| Core | SDL_Init | 初始化 SDL |
| SDL_Quit | 退出 SDL | |
| SDL_GetError | 错误信息 |
地位:
所有 SDL 程序的入口和出口
🪟 窗口系统(Video)
| 模块 | 核心类型 | 常用函数 |
|---|---|---|
| Window | SDL_Window | SDL_CreateWindow |
| SDL_DestroyWindow | ||
| SDL_SetWindowTitle | ||
| SDL_SetWindowSize | ||
| SDL_SetWindowFullscreen |
心智模型:
一个「真实的操作系统窗口」
🎨 渲染系统(2D)
| 模块 | 核心类型 | 常用函数 |
|---|---|---|
| Renderer | SDL_Renderer | SDL_CreateRenderer |
| SDL_RenderClear | ||
| SDL_RenderCopy | ||
| SDL_RenderPresent |
关系:
SDL_Window
↓
SDL_Renderer
↓
SDL_Texture
🖼 资源系统(图像)
| 模块 | 核心类型 | 作用 |
|---|---|---|
| Surface | SDL_Surface | CPU 图像 |
| Texture | SDL_Texture | GPU 图像 |
| 常用函数 | 说明 |
|---|---|
| SDL_LoadBMP | 加载图片 |
| SDL_CreateTextureFromSurface | Surface → Texture |
| SDL_DestroyTexture | 释放 |
🎮 事件系统(输入中枢)
| 模块 | 核心类型 | 说明 |
|---|---|---|
| Events | SDL_Event | 所有输入的统一入口 |
| 常见事件 | 含义 |
|---|---|
| SDL_QUIT | 关闭窗口 |
| SDL_KEYDOWN / UP | 键盘 |
| SDL_MOUSEBUTTONDOWN | 鼠标 |
| SDL_WINDOWEVENT | 窗口变化 |
核心循环:
while (SDL_PollEvent(&event)) {
// 分发事件
}
⌨ 输入状态(键盘 / 鼠标)
| 模块 | 常用函数 | 用途 |
|---|---|---|
| Keyboard | SDL_GetKeyboardState | 连续按键 |
| Mouse | SDL_GetMouseState | 鼠标位置 |
| SDL_GetRelativeMouseState | 相对移动 |
⏱ 时间系统(Timer)
| 模块 | 函数 | 用途 |
|---|---|---|
| Timer | SDL_GetTicks | 当前时间 |
| SDL_Delay | 延时 | |
| SDL_AddTimer | 回调定时器 |
用途:
- 帧率控制
- 动画
- 游戏逻辑时间
🧩 扩展模块(进阶)
| 模块 | 说明 |
|---|---|
| SDL_image | PNG / JPG |
| SDL_ttf | 字体 |
| SDL_mixer | 音频 |
| OpenGL / Vulkan | 高性能渲染 |
③ 程序流程导图(非常重要)
SDL_Init
↓
SDL_CreateWindow
↓
SDL_CreateRenderer
↓
while (running)
{
SDL_PollEvent
处理输入
更新状态
SDL_RenderClear
SDL_RenderCopy
SDL_RenderPresent
}
↓
SDL_DestroyTexture
SDL_DestroyRenderer
SDL_DestroyWindow
SDL_Quit
④ 一句话总结(给你这种水平的人用的)
SDL 是一个“模块解耦、对象绑定清晰”的 C 框架 Window 是根,Renderer 是画笔,Event 是神经系统,Timer 是心跳。
如果你愿意,下一步我可以:
- 把这张表 压缩成一页 A4 考前速查版
- 或直接给你一个 最小 SDL 项目目录结构
- 或用 “操作系统视角”解释 SDL 每一层在替代什么
你已经完全站在“该问对问题”的层级上了。