歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux字符界面sdl開發入門

linux字符界面sdl開發入門

日期:2017/3/1 11:55:38   编辑:關於Linux

linux下有沒有TurboC2.0那樣的畫點、線、圓的圖形函數庫,有沒有grapihcs.h,或者與之相對應或相似的函數庫是什麼?有沒有DirectX這樣的游戲開發庫?SDL就是其中之一。


SDL(Simple DirectMedia Layer)是一個誇平台的多媒體游戲支持庫,其中包含了對圖形、聲音、游戲桿、線程等的支持,目前可以運行在許多平台上,其中包括linux的 FrameBuffer控制台、svgalib、X Window環境,以及Windows DirectX、BeOS等。SDL是編寫誇平台游戲和多媒體應用的優秀平台,與Windows的DirectX有的一比。主頁:http: //www.libsdl.org。

SDL庫幾乎已經成了目前流行的Linux的標配的多媒體庫,系統安裝時一般都已經默認安裝了它們。利用SDL庫開發應用程序,首先,要在程序中聲明要使用的相應的頭文件,比如:#include ,然後,在編譯時指出要連接的SDL庫即可,比如:gcc -lSDL test.c -o test。SDL庫一般位於系統的標准頭文件目錄/usr/include裡,編譯器會在這個目錄裡找相應的頭文件,如果要進一步省略“SDL/”,則必須在編譯時指定頭文件的具體位置,例如:gcc -I /usr/include/SDL -lSDL test.c -o test。也可以:gcc `sdl-config-libs-cflags` test.c -o test。“`”不是單引號,而是位於鍵盤左上方的反引號。

要在linux控制台字符界面的環境下進行圖形開發,還要打開framebuffer功能,方法是修改/boot/grub/grub.conf配置文件,在kernel...一行後面添加vga=0x317。如下:
title Fedora Core (2.6.15-1.2054_FC5)
root (hd0,5)
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet vga=0x0317
initrd /initrd-2.6.15-1.2054_FC5.img

關於VGA值與顯示器分辨率的關系如表:
640X480 800X600 1024X768 1280X1024
8位色 0x301 0x303 0x305 0x307
16位色 0x311 0x314 0x317 0x31A
24位色 0x312 0x315 0x318 0x31B

初始化圖形模式

要加載和初始化SDL庫需要調用SDL_Init()函數,該函數以一個參數來傳遞要激活的子系統的標記,返回-1表示初始化失敗。
下表列出來SDL的各個子系統:
標記 表示
SDL_INIT_VIDEO 視頻子系統
SDL_INIT_AUDIO 音頻子系統
SDL_INIT_CDROM 光驅子系統
SDL_INIT_TIMER 計時器子系統
SDL_INIT_JOYSTICK 游戲桿子系統
SDL_INIT_EVERYTHING 全部子系統

要同時激活多個子系統,可以把相應的標記按位或,如:SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);

初始化SDL庫之後,還需要設置一下視頻模式,通過調用SDL_SetVideoMode()來完成:
SDL_Surface *screen;
screen=SDL_etVideoMode(640,480,16,SDL_SWSURFACE);/*640 X 480 X 16位色*/

SDL_Surface 定義在SDL_video.h中,它是一個繪圖平面,所有的繪圖操作都是在其上完成的。在退出圖形模式時由SDL自動處理。不需要用時需顯示的釋放:SDL_FreeSurface(surface);

先來看一下一個完整的例子:
//ex_sdl.c
#include
#include
int main()
{
SDL_Surface *screen;
Uint32 color;
if ( SDL_Init( SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "無法初始化SDL: %s\n", SDL_GetError());
exit(1);

}

SDL_ShowCursor(0);

screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE); /*640 X 480 X 16位色*/
if ( screen == NULL ) {
fprintf(stderr, "無法設置640x480x16位色的視頻模式:%s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
color = SDL_MapRGB(screen->format,0,0,255); /*藍色*/
SDL_FillRect(screen,&screen->clip_rect,color); /*整個屏幕填充顏色*/
SDL_UpdateRect(screen,0,0,0,0); /*更新整個屏幕*/
SDL_Delay(5000); /*延遲5秒鐘*/
}


atexit(SDL_Quit);的作用是在程序退出時調用SDL_Quit()函數,這樣就不必在每個要退出的地方都調用SDL_Quit()。
Copyright © Linux教程網 All Rights Reserved