sdl

news/2024/12/2 20:02:45/

SDL[编辑]

维基百科,自由的百科全书
Simple DirectMedia Layer
Sdl-logo.png
SDL的標誌
開發者Sam Lantinga
穩定版本1.2.14/
2009年10月19日
作業系統跨平台
類型API
許可協議GNU Lesser General Public License
網站libsdl.org

SDL(Simple DirectMedia Layer)是一套開放原始碼的跨平台多媒體開發函式庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函式,讓開發者只要用相同或是相似的程式碼就可以開發出跨多個平台(Linux、Windows、Mac OS X等)的應用軟體。目前SDL多用於開發游戏、模拟器、媒體播放器等多媒體應用领域。

SDL使用GNU宽通用公共许可证為授權方式,意指動態連結(dynamic link)其函式庫並不需要開放本身的原始碼。因此諸如《雷神之鎚4》等商業遊戲也使用SDL來開發。

目录

   [隐藏] 
  • 1 歷史
  • 2 結構與特色
  • 3 語法與子系統
  • 4 與DirectX比較
  • 5 使用SDL開發的作品
    • 5.1 遊戲
    • 5.2 游戏引擎
    • 5.3 其他
  • 6 SDL的延伸
  • 7 參見

歷史[编辑]

Sam Lantinga於1998年爲Loki Software工作時開發了SDL,並首先利用SDL將《毀滅戰士》移植到BeOS作業系統。

結構與特色[编辑]

SDL在作業平台上的結構圖

雖然SDL時常被比較為『跨平台的DirectX』,然而事實上SDL是定位成以精簡的方式來完成基礎的功能,它大幅度簡化了控制圖像、聲音、輸出入等工作所需撰寫的程式碼。但更高階的繪圖功能或是音效功能則需搭配OpenGL和OpenAL等API來達成。另外它本身也沒有方便建立圖形使用者介面的函式。

SDL在結構上是將不同作業系統的函式庫再包裝成相同的函式,例如SDL在Windows平台上其實是DirectX的再包裝,舊版本包裝的是DirectX 5,現時的版本(SDL 1.2)則是DirectX 7。而在使用X11的平台上(包括Linux),SDL則是與Xlib函式庫溝通來輸出圖像。

雖然SDL本身是使用C語言寫成,但是它幾乎可以被所有的程式語言所使用,例如:C++、Perl、Python(藉由pygame函式庫)、Pascal等等,甚至是Euphoria、Pliant這類較不流行的程式語言也都可行。

SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:

  • SDL_image—支援時下流行的圖像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
  • SDL_mixer—更多的聲音輸出函式以及更多的聲音格式支援。
  • SDL_net—網路支援。
  • SDL_ttf—TrueType字体渲染支持。
  • SDL_rtf—简单的RTF渲染支持。

語法與子系統[编辑]

SDL將功能分成下列數個子系統(subsystem):

  • Video(圖像)—圖像控制以及執行緒(thread)和事件管理(event)。
  • Audio(聲音)—聲音控制
  • Joystick(搖桿)—遊戲搖桿控制
  • CD-ROM(光碟機)—光碟媒體控制
  • Window Management(視窗管理)-與視窗程式設計整合
  • Event(事件驅動)-處理事件驅動

以下是一支用C語言寫成、非常簡單的SDL範例:

// Headers
#include "SDL.h"// Main function
int main(int argc, char* argv[])
{// Initialize SDLif(SDL_Init(SDL_INIT_EVERYTHING) == -1)return(1);// Delay 2 secondsSDL_Delay(2000);// Quit SDLSDL_Quit();// Returnreturn 0;
}

上述程式會載入所有SDL子系統(出錯則退出程式),然後暫停兩秒,最後關閉SDL並結束程式。

與DirectX比較[编辑]

与DirectX比较对应关系如下:

SDLDirectX說明
SDL_Video、SDL_Image、OpenGLDirectDraw、Direct3D 
SDL_Audio、SDL_MixerDirectSound 
SDL_Joystick、SDL_BaseDirectInput 
SDL_NetDirectPlay 
SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_FilterDirectShow 


使用SDL開發的作品[编辑]

遊戲[编辑]

韦诺之战
  • 《Spore》
  • 《Tux Paint》
  • 《Simutrans》
  • 《Stepmania》
  • 《Frozen Bubble》
  • 《絕冬城之夜》(Neverwinter Nights)
  • 《魔法門之英雄無敵III》(Heroes of Might and Magic III)(Linux版)
  • 《模擬城市3000》(Sim City 3000)(Linux版)
  • 《魔域幻境之浴血戰場》(Unreal Tournament)(Linux版)
  • 《魔域幻境之浴血戰場2003》(Unreal Tournament 2003)(Linux版)
  • 《魔域幻境之浴血戰場2004》(Unreal Tournament 2004)(Linux版)
  • 《第二人生》(Second Life)(Linux版)
  • 《傭兵戰場》(Soldier of Fortune)(Linux版)
  • 《韦诺之战》(Battle for Wesnoth)
  • Bos Wars

游戏引擎[编辑]

  • SDLPAL - 仙剑奇侠传的引擎的开源实现
  • CorsixTH - 杏林也瘋狂的引擎的开源实现

其他[编辑]

  • QEMU - 模拟器

SDL的延伸[编辑]

自由軟體主題 自由軟體主題首頁
  • pygame—針對遊戲開發的Python模組
  • SMPEG—SDL MPEG函式庫
  • Guichan—遊戲使用者介面開發函式庫
  • ParaGUI—使用者介面開發函式庫
  • CRM32Pro—遊戲開發包(SDK)
  • SDL.NET—使用C#的.NET包裝

參見[编辑]

  • DirectX
  • OpenGL
  • OpenAL
  • Allegro—跨平台的遊戲開發函式庫

http://www.ppmy.cn/news/663051.html

相关文章

【NL】《Non-local Neural Networks》

CVPR-2018 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Non-local Neural Networks4.1 Formulation4.2 Instantiations4.3 Non local Block4.4 Video Classification Models 5 Experiments5.1 Datasets5.2 Experiments on Kinetics (Vid…

LIST OF NOSQL DATABASES

转自:http://nosql-database.org/ NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable. The original intention has beenmodern web-scale databases…

NSDictionary

创建 单个创建 NSDictionary *dict [NSDictionary dictionaryWithObjects:(NSArray *) forKeys:(NSArray<id<NSCopying>> *)]; 多个创建 NSDictionary *dict [NSDictionary dictionaryWithObjects:(NSArray *) forKeys:(NSArray<id<NSCopying>> *)…

NDSI LL定位之我见

自己的一点看法&#xff0c;不满意可尽情拍砖。 在说这个问题之前&#xff0c;我们先明确一点&#xff0c;任天堂绝对是游戏界得道的老妖精&#xff0c;它不会SB到推出一款谁都不要的东东&#xff0c;除非他们集体洗澡的时候水从耳朵中进去了。 呃&#xff0c;所以我们从另一个…

xml中like的几种写法(模糊查询)

方法1&#xff1a;concat <where> <trim suffixOverrides"," > <if test"id ! null and id ! " > and id #{id} </if> <if test"name ! null and name ! " > …

lr测试HTTPS协议

过格尔网关的测试 基于https的传输协议&#xff0c;需要使用ca证书来进行访问&#xff0c;客户端需要使用https来打开页面。 首先需要准备测试使用的证书。 制作*.pfx格式&#xff0c;该种格式的证书可以通过双击运行安装到IE浏览器上。 这种证书需要客户网关的管理人员&…

此计算机当前已经连接限制为*** WIFI 无线连接不成功

**问题&#xff1a;**连接网络时弹出如下窗口 解决方案&#xff1a; WIN7 任务栏网络图标&#xff0c;右键打开网络和共享中心。 WIN10控制面板 >网络和共享中心 更改适配器设置&#xff0c;找到你的无限网卡WLAN&#xff0c;右键属性。如下界面&#xff1a; 取消掉第二个选…

为什么笔记本连接WiFi总是受限

因为笔记本不经常带回宿舍&#xff0c;所以不怎么在宿舍登cmcc-edu&#xff0c;可是最近几次&#xff0c;我在宿舍连接cmcc-edu总是受限&#xff0c;将就了几次后终于将就不下去了&#xff08;所以&#xff0c;不将就是发现的源动力&#xff09;。连接受限应该是网络连接设置的…