侵删创建一个窗口的过程 _ 自带梯子哦~
首先来了解一下SDL窗口创建的流程
- SDL初始化
- 创建一个窗口
- 获取到这个窗口的surface(这个surface就是我们绘图的时候会用到的对象)
- 操作这个surface
- 更新窗口
SDL初始化
- 初始化调用的是SDL_Init函数
- SDL有好几个子系统,主要是VIDEO , AUDIO , TIME , EVENTS ...要初始化不同的系统就传不同的参数
SDL_Init(SDL_INIT_VIDEO)
SDL创建窗口
- 创建窗口使用的函数是SDL_CreateWindow
- 第一个参数是标题
- 第二个和第三个是窗口创建出来的位置x,y。SDL_WINDOWPOS_UNDEFINED这个表示我们不关心窗口的位置
- 第四个和第五个参数是窗口的宽度和高度
- 最后一个参数是窗口创建的时候就显示出来
window = SDL_CreateWindow("SDL Demo",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,SCREEN_HEIGHT,//窗口的宽度和高度
SDL_WINDOW_SHOWN
);
获取到窗口的surface,并且操作surface
- 获取surface的函数是SDL_GetWindowSurface(window);
操作完surface之后更新窗口的操作是
SDL_UpdateWindowSurface(window);
Demo源码
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
//SDL demo main
int main(int argc, char* argv[]) {
SDL_Window *window = NULL;
SDL_Surface *surface = NULL;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL无法初始化 %s",SDL_GetError());
return -1;
}
window = SDL_CreateWindow("SDL Demo",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,//这两个是窗口的位置 x y(不在乎)
SCREEN_WIDTH,SCREEN_HEIGHT,//窗口的宽度和高度
SDL_WINDOW_SHOWN //确保在创建窗口时显示该窗口
);
if (window == NULL) {
printf("创建window失败");
return -1;
}
//接下来是获取窗口的屏幕 这样才能绘制
surface = SDL_GetWindowSurface(window);
if (surface == NULL) {
printf("获取屏幕失败");
return -1;
}
//填充为红色
SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0xff, 0x00, 0x00));
//更新窗口操作
SDL_UpdateWindowSurface(window);
//等待2秒
SDL_Delay(2 * 1000);
//销毁资源退出
SDL_DestroyWindow(window);
return 0;
}
Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day
网友评论