哈喽~我又来写教程了,没错,还是我……
就我一个人写这个,不是我是谁?啦啦~本节,我们学习的是:SDL2的初始化+简单绘制窗口+退出,先把头文件加上
好了,现在可以使用SDL2函数了,先申明两个变量
// 窗口 SDL_Window *Window = NULL; // 窗口表面 SDL_Surface *WindowScreen = NULL;
第一个变量,正如它上方的注释说的那样,不对,光是类型就可以知道它是什么,一个窗口,我们就是在上面画东西的,还有一个是Surface翻译过来就是表面,不用解释了吧?申明之后我们来看看程序的一个小块,初始化部分
//初始化函数
int Init()
{
SDL_Init(SDL_INIT_VIDEO);
卡!第一个新函数SDL_Init看名字就知道是初始化用的,那么它的参数是什么含义呢?答案是被初始化的东西啦~看看它可以初始化多少东西~
SDL_INIT_TIMER | 计时器子系统 |
SDL_INIT_AUDIO | 音频子系统 |
SDL_INIT_VIDEO | 视频子系统 |
SDL_INIT_JOYSTICK | 控制杆子系统 |
SDL_INIT_HAPTIC
|
触控(力量反馈)子系统 |
SDL_INIT_GAMECONTROLLER
|
控制器子系统 |
SDL_INIT_EVENTS
|
事件子系统 |
SDL_INIT_EVERYTHING
|
所有的子系统 |
SDL_INIT_NOPARACHUTE
|
不要捕获致命的信息 |
不错哎,挺多的,本节我们只需要初始化管理视频的部分就好,多了也没啥用,所以用SDL_INIT_VIDEO就好,其他留着吧,蒽,初始化成功返回0,让我们接着往下看
// 创建窗口
Window = SDL_CreateWindow("SDL_Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 240, 400, SDL_WINDOW_SHOWN);
卡……有木有发现我们刚刚的的Window=NULL?是了。我们的Create函数出来了~SDL_CreateWindow作用:创建一个窗口,参数,第一个参数,是窗口的窗口的标题,第二个,第三个都是位置信息,我们这里用的是SDL_WINDOWPOS_CENTERED指明处于显示器中心……好吧,在Android没有这些,所以,你最好还是填上两个数比如0啊1啊的,或者是SDL_WINDOWPOS_UNDEFINED未定义得了,这里我填了个240和300,毕竟要在电脑上运行,没有大小可不行,嘿嘿,第四个,第五个是窗口的宽度和高度,在Android上随便填,反正不管怎样都是全屏,最后一个参数是窗口的状态,这里填了个SDL_WINDOW_SHOWN,简单的显示窗口,还有其他的状态那个我就不多说了,想知道的自己去Wiki看看吧。下面判断一下创建好了没有~
if (Window == NULL)
return -1;
// 获取Window的表面
WindowScreen = SDL_GetWindowSurface(Window);
if (WindowScreen == NULL)
return -2;
return 0;
}
函数SDL_GetWindowSurface不用说了吧?接下来,看看收尾函数,清理内存
//清理函数
void Destroy()
{
SDL_FreeSurface(WindowScreen);
SDL_DestroyWindow(Window);
SDL_Quit();
}又不用说,看函数名就知道,最后一个SDL_Quit与初始化函数相对,退出~
int main(int args, char *argv[])
{标准化的main函数,main函数必须这样申明哦~不然SDL2可不认你的主函数哦
if (Init() != 0)
return -1;
//填充窗口
SDL_FillRect(WindowScreen, NULL, SDL_MapRGB(WindowScreen->format, 0xFF, 0x00, 0x00));SDL_MapRGB这个函数用来创建一个Uint32的颜色,Uint32大致与unsigned int相当,我们来看看第一个参数,我们是这样用的:“WindowScreen->format”表示的类型是 SDL_PixelFormat获取了WindowScreen的一个成员format,格式,总而言之就是获取WindowScreen的像素格式,因为Uint32在储存空间里有32位,哪一位表示什么全凭个人喜好喽(至少我是这么看的),蒽,接下来的三个参数分别表示红色,绿色,蓝色,取值范围为0~255(十六进制:0x00~0XFF),与美术上的三原色有点不同(我记得好像是红黄蓝)好了,看看理解没?理解了就看看外面的函数SDL_FillRectSDL Fill Rectangle 填充矩形,也是三个参数,第一个参数是被填充矩形的表面,第二个是填充的矩形大小,是一个SDL_Rect的类型
typedef struct SDL_Rect
{
int x, y;
int w, h;
} SDL_Rect;有x,y,w,h四个成员,分别表示x,y,width,height,这里填写的是NULL,表示空,即默认值,就是全部填充。
//更新窗口 SDL_UpdateWindowSurface(Window); SDL_Delay(2000);
更新窗口和暂停一下, SDL_UpdateWindowSurface更新窗口的表面,跟1.2版的SDL_Flip一个性质SDL_Delay暂停,单位是毫秒,把窗口停留2秒~
Destroy(); return 0; }
哦啦。可以运行了~run....大大的全屏中国红~