SDL2的学习之路
工作之余的爱好<闲的~>,自己玩了下几个游戏开发的引擎<白鹭(h5的其余都c++的),easy2d(简单易上手),sdl2,sfml等,后续打算都写写怎么用的,看大家的反响(看自己懒惰程度)>,也自己基于d3d写了个简单的引擎,还去玩了下UE4这种成熟完善的引擎,玩的多了,记不住了,来记录且分享下,希望跟大家一起交流成长,废话不多,注重简洁明了(我懒)
SDL2的下载
官网下载地址:http://www.libsdl.org
需要注意的是,除了基本的sdl库,还需要另外两个非常有用的库,
sdl2_image和sdl2_ttf。这两个分别是用来加载图片和字体的。sdl本身仅有对bmp格式图片的处理,没有对png,jpeg,gif等其它格式图片的处理接口。还有更多sdl扩展库,如sdl_net网络支持,SDL_mixer更多音频的支持等,这些暂时用不到,后续学习用到再说。
扩展库和SDL库在github都能下载到,这里不做重点。
SDL2的项目配置
用这个的应该都会的,不多写~
有一点小坑需要注意,就是需要在项目中配置SDL目录,不要直接在包含的地方写相对或者绝对路径,就是最好是直接写include “SDL.h”,不要写include “…/sdl2_xx.xx/include/SDL.h”,因为扩展库SDL_image里也会用到sdl.h文件,如果不在项目工程中配置好,会编译报错。
开始创建窗口
sdl是直接接管窗口的创建的,方便菜鸟<我>的使用,不方便大神<各位看官>的自由发挥。
惯例,开头包含头文件
#include "SDL.h"
#include "SDL_image.h"
#include "SDL_ttf.h"
链接库
#pragma comment(lib,"SDL2.lib")
#pragma comment(lib,"SDL2main.lib")
#pragma comment(lib,"SDL2_image.lib")
#pragma comment(lib,"SDL2_ttf.lib")
main函数
//这里使用vs创建的项目,项目创建的时候类型需要选择窗口而不是控制台
//这里注意需要带上参数int, char**,否则会编译报错,这是因为这个是窗口而不是控制台项目
int main(int, char**)
{
//初始化SDL引擎
//0成功,负值失败,所有sdl失败的原因都可以根据SDL_GetError()获得
//SDL_INIT_EVERYTHING这个参数表示一次性将音视频,计时器,事件等都初始化好
SDL_Init(SDL_INIT_EVERYTHING);
//创建窗口
/*基本需要用到的也就是窗口标题:第一个参数
窗口的大小:下面代码中的800是宽,600是高
SDL_WINDOW_OPENGL 是启用opengl渲染
创建失败则返回空指针NULL
*/
SDL_Window* window = SDL_CreateWindow("SDL Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN);
//创建渲染结构
/*失败则返回空指针NULL
第三个参数需要注意下, 值SDL_RENDERER_PRESENTVSYNC不建议使用,这个使用了就不会按你设置的帧频去渲染了,而是按显示器的更新频率去渲染
SDL_RENDERER_ACCELERATED这个值表示启用硬件加速,如果电脑不支持,开了也白开- -
*/
SDL_Renderer* render = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED);
bool quit = false;
//循环窗口,不加循环窗口就咻的一下没了- -
while(!quit)
{
//循环处理事件
SDL_Event event;
while(SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
quit = true;
//这里可以其它事件处理了
}
//这里可以开始更新事件
//onUpdate();
//更新完可以渲染界面了
SDL_RenderClear(render);
//更新你的图片,字体....
//结束绘制,渲染到屏幕
//如果创建渲染的时候加了SDL_RENDERER_PRESENTVSYNC这个参数,那么这个地方就不会立马渲染到屏幕
SDL_RenderPresent(render);
//这里需要让CPU去喝口水上个厕所- -
//自己设置帧频的时候需要在这里计算delay的时间
SDL_Delay(10);
}
//窗口关闭,开始让SDL清理自己遗留的现场了
//看完球赛,带走垃圾,保护环境,人人有责
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
这里基本的窗口就创建完毕了,编译完毕就可以启动看到一个黑洞的的窗口了,窗口如宇宙,待你去探究,添加日月星辰,让其徜徉太空随尔心尔欲。
本小节结束
窗口创建结束,SDL_image和SDL_ttf这节其实都没用上。下节先显示图片,开始在宇宙中创造生命吧。