SDL圖形編程

配置方法

  • Code Block
    • 需要再Build Options中設定Libraries和Linkers
      • 方便Code Block調用第三方函式庫
    • 出現dll找不到的問題,需要把MinGw下的dll放到專案下
  • autocomplete配置
    • Settings可以配置libraries路徑,配置完成後重新開啟專案就有自動提示功能
  • 主函數要傳兩個參數進去
    • int argc
    • char** argv
  • SDL_Create_Window
    • 建立視窗
      • 視窗標題
      • 設定位置:x,y
        • 不設定視窗位置,讓系統決定出現的位置
          • SDL_WINDOWPOS_UNDEFINED
      • 設定視窗大小
      • 設定狀態:SDL_WINDOW_SHOWN
  • SDL_Surface生命週期
    • SDL_GETWindowSurface(window)
    • SDL_FreeSurface(surface)
    • SDL_DestoryWindow(window)
    • SDL_Quit()
  • 把窗口卡住
    • 不利於動畫製作
      • SDL_Delay(3000)
    • 用死循環卡住窗口
      • 占用資源太大(CPU資源)
    • 用事件比較好,窗口運行不斷查看事件
      • SDL_Event event
      • SDL_POLLEvent(&event)
      • 沒有寫任何定義會關不掉窗口(因為不知道要幹嘛)
    • SDL_FillRect(surface, NULL, 0)
      • 把移動之後出現的空白軌跡給塗成黑色
  • 更新Surface
    - 每一個圖片都需要貼到一個Surface上面
    - 用SDL_BlitSurface()貼上去
    - SDL_UpdateWindowSurface(window)
    • 載入圖片
      • Load_BMP:24位圖(不支持alpha通道,不支援透明度)
      • IMG_Load:載入Png(SDL_Image)
    • 載入音效
      • mixer(SDL2-mixer)
      • wav:無損壓縮,適合用於短的音樂
      • mp3:壓縮格式,適合用於長的音樂(背景音樂)
  • SDL教程

SDL Render template

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdlib.h>
#include <stdbool.h>
#include <SDL2/SDL.h>

#define WINDOW_WIDTH 800;
#define WINDOW_HEIGHT 600;

int main(int args, char** argv)
{
SDL_Window* window = SDL_CreateWindow("Hello", SDL_WINDOW_UNDEFINED, SDL_WINDOW_UNDEFINED, WINDOW_WIDTH,WINDOW_HEIGHT,SDL_WINDOW_SHOWN);
SDL_Render* rend = SDL_CreateRender(window, -1, SDL_RENDER_ACCELERATED);

bool quit = false;
SDL_Event event;
while(!quit){
while(SDL_PollEvent(&event)){
if(event.type == SDL_QUIT) {
quit = true;
}
}
SDL_Delay(10);
}
SDL_DestroyWindow(window);
return 0;
}