SDL 創建窗口

創建一個窗口的過程 _ 自帶梯子哦~

侵刪

首先來了解一下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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容