創建一個窗口的過程 _ 自帶梯子哦~
侵刪
首先來了解一下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