SDL2的学习之路<一> 创建基本窗口

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这节其实都没用上。下节先显示图片,开始在宇宙中创造生命吧。

你可能感兴趣的:(c++游戏,学习,c++,游戏引擎)