logo资料库

sdl2初级教程.pdf

第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
资料共43页,剩余部分请下载后查看
目 录
第一课 创建窗口
第二课 显示图片
第三课 图片处理
第一节 去背景色
第二节 切割图片
第三节 旋转缩放
第四课 显示字体
第五课 触屏事件
第六课 键盘事件
第七课 音频播放
第八课 限制帧频
第九课 新建线程
SDL 2.0 中文教程 初级入门 本书新鲜出炉,如有任何意见或建议记得联系 作者。 DXKite 2014/6/27 Friday
书名:SDL2 基础教程 作者:DXkite 所属团队:Fantasty Angle 团内称号:WindAngle 当前版本:1.0 主贴吧:C4droid 吧 官方贴吧:DXKite 吧 完成日期 :2014 年 6 月 27 日 源码下载 Copyright (c) 2014 DXkite All rights reserved. 1
前 言 本书面向的对象为 SDL2 初学者。 或正在使用 C4droid 练习 c/c++语音的中学生高中生等。 本书介绍了 SDL2 上基础的几个部分,学完本书相信大家基 本学会了 SDL2 的使用方法。对于本书的源码全部在 Android 平 台 C4droid 用 g++编译器编译通过。当然我希望源代码在你的 开发平台上总要有一点小问题,自己动手,丰衣足食。这样边 学边用,效果好! 如有任何问题,百度不到的可以上 C4droid 吧发帖提问 DXKite 于 2014 年 6 月 27 日星期 2
目 录 第一课 创建窗口…………………………………………………4 第二课 显示图片……………………………………………..8 第三课 处理图片 ……………………………………………….11 第一节 去背景色………………………………………………………………….11 第二节 切割图片…………………………………………………………………..16 第三节 旋转缩放…………………………………………………………………..17 第四课 显示字体……………………………………………….24 第五课 触屏事件……………………………………………….27 第六课 键盘事件……………………………………………….29 第七课 音频播放……………………………………………….33 第八课 限制帧频……………………………………………….37 第九课 新建线程……………………………………………….39 3
第一课 创建窗口 第一次写教程,不要介意啊,有什么意见或建议建议欢迎上贴吧@DXkite,本课 我们要学的内容是创建窗口,首先要包含 SDL2 的头文件: #include "SDL2/SDL.h" 头文件里包含了你将会用到的 SDL2 函数 申明主函数,注意记住主函数的参数,因为 SDL2 很霸道的把主函数也定义了,所以主 函数必须这样申明 int main(int argc,char *argv[]); int main(int argc , char **argv) { 偷偷的告诉你,不用记那个参数名,,只要类型记得就行了:int main(int,char**) 嘿嘿。我经常忘掉参数名这东西吐槽一句,我刚刚用:int main()也成功运行 了。。。申明完主函数后,我们可以在主函数里做事了。首先,你需要申明一 个 SDL_Window*结构体,注意有个*号捏,还要在申明时初始化为 NULL: SDL_Window* win=NULL; 在使用指针前初始化为 NULL 是一个很好的习惯,话说在申明变量是初始化也 是个好习惯,我曾经被没有初始化变量弄得焦头烂额,呃呃,扯远了。这个干 嘛用捏?看到结构体名字就知道是今天的主角窗口了。 窗口有了,那么我们要想在窗口上作画,要怎么办?嗯!到点了,我们想要在 窗口上作画的话,就需要专门的画笔:Renderer;让我们来申明一个吧! SDL_Renderer *renderer=NULL; 我试过为一个窗口创建两个画笔,但是有一个好像怎么也创建不了。。申明有 了,那让我们为窗口和画笔添加内容: win = SDL_CreateWindow("Hello World", 0, 0, 480, 800, 0); renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); 4
关于上面用到的函数,你可以在官网 Wiki 查到。我就不详细说明了,要注意的 是窗口的大小,在 C4droid 上它总是全屏的。所以在 C4droid 上,设不设置关 系不大。 在申明了上面两个后,还需要申明一张画板:Texture。。 SDL_Texture *HelloTex = NULL; 这很好理解,你想想,你总不能直接在墙上画画吧?直接画?!!*^_^*小心 小屁屁哦!靠!1:11 了,睡觉,明天继续写。与画板配对的当然是画纸 Surface: SDL_Surface *Surface = NULL; 为什么还要弄个画纸出来?不是有画板就够了吗? 答案是画板只能在一个墙上画,是一个墙专有物品,而画纸是通用物品,可以 在更多地方用哦!因为你绘画不可能只在一个地方画吧?还有画好的东西可以 通用,也可以省点力喽。。。 Surface = SDL_LoadBMP("/mnt/sdcard/hello.bmp"); HelloTex = SDL_CreateTextureFromSurface(renderer, Surface); 上面的代码是在画纸上作画和把画纸贴在画板 HelloTex 上。注意画纸(Surface) 的加载函数,这里用到的是 LoadBMP()也就是说只支持加载 bmp 格式的图片文 件,这很重要,不然没发加载。。。。还有路径:"/mnt/sdcard/hello.bmp", 在 SDL2 下的图片文件都是要用绝对路径的,如果使用相对路径,则不能加载。 用完画纸后,由于不需要它了,就把它清理一下: SDL_FreeSurface(Surface); 释放内存。下面关键到了!,开始挥动大笔作画吧!熟悉清理手中的画笔,让 它保持干净。 SDL_RenderClear(renderer); 然后再画: SDL_RenderCopy(renderer, HelloTex, NULL, NULL); 5
这里有两个 NULL 参数,第一个是截取画板上的区域,一个是截取墙上的区域, 关于使用它,我会在第三课为大家介绍,还会介绍它的孪生兄弟给你哦! 要像 图片在窗口上显示出来,必须要刷新一下! SDL_RenderPresent(renderer); 好了,基本上可以了,再有就是 SDL_Delay(2000); 在窗口上停留 2 秒(2000 毫秒) 最后是 /* 销毁绘画表面 */ SDL_DestroyTexture(HelloTex); /* 销毁渲染器 */ SDL_DestroyRenderer(renderer); /*销毁窗口*/ SDL_DestroyWindow(win); /*退出*/ SDL_Quit(); return 0; } 清理收尾,这下,可以了。运行一下: 6
7
分享到:
收藏