SDL游戏开发教程04(C++封装SDL)
前面的章节介绍了一个简单窗口的开发,这节将介绍如何把前面用到的东西用C++封装起来。
为什么用C++封装起来:
1、C语言没有异常机制,每次调用一个函数都需要通过检查返回值来判断是否成功,比较麻烦。
2、对我个人而言,开发效率上C++要优于C语言,并且C++的代码要容易组织管理,写出来的代码也更容易理解。
封装的主要部分:
1、将所有的SDL函数都用类包装起来,对于需要做返回值判断的函数,在包装的地方进行判断,然后决定是否抛出异常。这样对于调用者来说就不需要再做返回值判断了。
2、新建一个SDL类。该类用到了单例模式和工厂模式, 提供了访问所有SDL函数的入口。
3、将创建窗口和消息循环这部分代码封装成一个框架类,以后写代码时只要继承这个框架就可以了。
4、包装SDL_Surface结构体,使它可以像普通对象一样使用。因为通过SDL API获取一个SDL_Surface后需要要手动释放,否则会造成内存泄漏。
封装之后的main函数:
Cpp代码
#include <string>
#include "lessons/Lesson01.h"
int main( int argc, char* args[] )
{
Lesson01 frame;
frame.setSize(800, 600); //设置窗口大小
frame.setTitle("Lesson01"); //设置标题
frame.open(); //打开窗口并开始循环
return 0;
}
封装成这样子之后,我们可以将不同课程中的例子代码写在不同的类中,完全隔离开,到时候想运行哪一课的例子修改一下main中的Lesson01就可以了。
下面根据这份代码逐步介绍封装过程。上面main函数中用到了Lesson01类,下面先看看Lesson01里面有些什么东西。
Lesson01.h
Cpp代码
#ifndef LESSON01_H_
#define LESSON01_H_
#include "../SDLFrame.h"
class Lesson01 : public SDLFrame
{
public:
Lesson01();
virtual ~Lesson01();
protected:
void onRender(); //渲染窗口
void onInit(); //初始化
public:
SDLSurfacePtr message; //界面要显示的图片
};
#endif /* LESSON01_H_ */
Lesson01.cpp
Cpp代码
#include "Lesson01.h"
Lesson01::Lesson01()
{
// TODO Auto-generated constructor stub
}