编辑“︁
SDL
”︁
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA |G1=Games |G2=IT |G3=FL | 1= zh-cn:库;zh-hk:庫;zh-mo:庫;zh-my:库;zh-sg:库;zh-tw:函式庫; | 2= zh-cn:参见;zh-hk:相關條目;zh-mo:相關條目;zh-my:参见;zh-sg:参见;zh-tw:相關條目; | 3= zh-cn:参考文献;zh-hk:參考文獻;zh-mo:參考文獻;zh-my:参考文献;zh-sg:参考文献;zh-tw:參考資料; }} {{Other uses}} {{Infobox Software | name = Simple DirectMedia Layer | logo = Simple_DirectMedia_Layer,_Logo.svg | caption = SDL的標誌 | developer = Sam Lantinga | maintainer = Sam Lantinga | released = {{Start date and age|1998}} | latest_release_version = 3.2.14 | latest_release_date = {{Release date and age|2025|05|14}} | operating_system = [[跨平台]] | genre = [[API]] | license = [[Zlib授权]]<br />2.0.0前:[[GNU LGPL|GNU較寬鬆公共許可證(LGPL)]] | website = [http://www.libsdl.org libsdl.org] }} '''SDL'''({{langx|en|Simple DirectMedia Layer}})直譯為'''簡單直接媒體層函式庫'''是一套[[開放原始碼]]的[[跨平台]][[多媒體]]開發[[函式庫]],使用[[C語言]]寫成。SDL提供了數種控制圖像、聲音、輸出入的函式,讓開發者只要用相同或是相似的程式碼就可以開發出跨多個平台([[Linux]]、[[Windows]]、[[Mac OS X]]等)的應用軟體。目前SDL多用於開發[[游戏]]、[[模拟器]]、[[媒體播放器]]等多媒體應用领域。 SDL(第一版)使用[[GNU宽通用公共许可证]]為授權方式,意指動態連結(dynamic link)其函式庫並不需要開放本身的原始碼。因此諸如《[[雷神之鎚4]]》等商業遊戲也使用SDL來開發。而第二版的SDL則改用[[Zlib授权]]來發行授權。 == 歷史 == Sam Lantinga於1998年爲[[Loki Software]]工作時開發了SDL,並首先利用SDL將《[[毀滅戰士]]》移植到[[BeOS]]作業系統。他於2008年創立 [[Galaxy Gameworks]] 幫助SDL商業支持,因為時間限制該公司計劃被擱置。<ref>{{cite web| title=Exploring the Galaxy| url=http://slouken.blogspot.com/2011/04/exploring-galaxy.html| date=6 April 2011| accessdate=30 January 2012| archive-date=2015-06-22| archive-url=https://web.archive.org/web/20150622133127/http://slouken.blogspot.com/2011/04/exploring-galaxy.html| dead-url=yes}}</ref>在Galaxy Gameworks擱置後不久,Lantinga 宣布 SDL1.3(之後成為 SDL2.0)將以 [[Zlib授權]]。<ref name=SDL1.3zLib>[http://forums.libsdl.org/viewtopic.php?t=7148 SDL 1.3 to be zLib Licensed] {{Wayback|url=http://forums.libsdl.org/viewtopic.php?t=7148 |date=20150622133301 }}, SDL Mailing List, 7 April 2011</ref>Lantinga 於2012年7月14日宣布 SDL 2.0,同時宣布他即將加入[[維爾福|Valve 公司]],在他加入公司同一天發表第一個SDL版本。<ref>{{cite web | url=http://www.phoronix.com/scan.php?page=news_item&px=MTE0MDU | title=SDL 2.0 Is Coming Very Soon With New Features | accessdate=17 August 2012 | archive-date=2015-06-22 | archive-url=https://web.archive.org/web/20150622132448/http://www.phoronix.com/scan.php?page=news_item&px=MTE0MDU | dead-url=no }}</ref>Lantinga在2013年8月13日發布SDL 2.0.0的穩定版。<ref name=Announcing-SDL2.0.0>[http://forums.libsdl.org/viewtopic.php?p=38569&sid=9efbea827cdebd71ee430cda823bcdc7#38569 Announcing SDL 2.0.0] {{Wayback|url=http://forums.libsdl.org/viewtopic.php?p=38569&sid=9efbea827cdebd71ee430cda823bcdc7#38569 |date=20150622133106 }}, SDL Mailing List, 13 August 2013</ref> SDL 2.0是一個重大更新,與 SDL 1.2 有很多不同,API不能向後相容。<ref>[http://wiki.libsdl.org/moin.cgi/MigrationGuide#Backward-compatibility MigrationGuide - SDL Wiki'] {{Wayback|url=http://wiki.libsdl.org/moin.cgi/MigrationGuide#Backward-compatibility |date=20130127115533 }}. Wiki.libsdl.org (21 November 2013). Retrieved on 2013-12-08.</ref> 新增一些功能:多視窗的支持,2D圖形硬體加速,更好的Unicode支援。<ref>{{cite web |url=http://wiki.libsdl.org/moin.cgi/Roadmap |title=SDL 1.3 Roadmap |date=14 June 2011 |accessdate=25 July 2011 |archive-date=2012-07-12 |archive-url=https://web.archive.org/web/20120712022324/http://wiki.libsdl.org/moin.cgi/Roadmap |dead-url=yes }}</ref> 從 SDL 2.0.2 開始支援 Mir 和 Wayland。(但預設仍然是關閉的)<ref>{{cite web |url=http://www.omgubuntu.co.uk/2014/02/mir-sdl-support |title=Some of Linux’s Most Popular Games Will Run Natively On Mir |first=Joey-Elijah |last=Sneddon |date=5 February 2014 |accessdate=19 March 2014 |archive-date=2015-05-19 |archive-url=https://web.archive.org/web/20150519021641/http://www.omgubuntu.co.uk/2014/02/mir-sdl-support |dead-url=no }}</ref> 即將到來的 2.0.4 將會提供 Android 更好的支援。<ref>{{Cite web |url=https://wiki.libsdl.org/SDL_SysWMinfo |title=存档副本 |accessdate=2015-06-22 |archive-date=2015-06-22 |archive-url=https://web.archive.org/web/20150622132907/https://wiki.libsdl.org/SDL_SysWMinfo |dead-url=no }}</ref> == 結構與特色 == [[File:SDL Layers.svg|thumb|250px|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語言|Pascal]]等等,甚至是[[Euphoria语言|Euphoria]]、[[Pliant]]這類較不流行的程式語言也都可行。 SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”: *'''[http://www.libsdl.org/projects/SDL_image/ SDL_image]{{Wayback|url=http://www.libsdl.org/projects/SDL_image/ |date=20101223104135 }}'''—支援時下流行的圖像格式:[[BMP]]、[[PBM格式|PPM]]、[[X Pixmap|XPM]]、 [[PCX]]、[[GIF]]、[[JPEG]]、[[PNG]]、[[Truevision TGA|TGA]]。 *'''[http://www.libsdl.org/projects/SDL_mixer/ SDL_mixer]{{Wayback|url=http://www.libsdl.org/projects/SDL_mixer/ |date=20101224003208 }}'''—更多的聲音輸出函式以及更多的聲音格式支援。 *'''[http://www.libsdl.org/projects/SDL_net/ SDL_net]{{Wayback|url=http://www.libsdl.org/projects/SDL_net/ |date=20090321174144 }}'''—網路支援。 *'''[http://www.libsdl.org/projects/SDL_ttf/ SDL_ttf]{{Wayback|url=http://www.libsdl.org/projects/SDL_ttf/ |date=20101223190259 }}'''—[[TrueType]]字体渲染支持。 *'''[http://www.libsdl.org/projects/SDL_rtf/ SDL_rtf]{{Wayback|url=http://www.libsdl.org/projects/SDL_rtf/ |date=20100913213300 }}'''—简单的[[RTF]]渲染支持。 == 語法與子系統 == SDL將功能分成下列數個子系統(subsystem): *'''Video(圖像)'''—圖像控制以及執行緒(thread)和事件管理(event)。 *'''Audio(聲音)'''—聲音控制 *'''Joystick(搖桿)'''—遊戲搖桿控制 *'''CD-ROM(光碟機)'''—光碟媒體控制 *'''Window Management(視窗管理)'''-與視窗程式設計整合 *'''Event(事件驅動)'''-處理事件驅動 以下是一支用C語言寫成、非常簡單的SDL範例: <syntaxhighlight lang=C> // Headers #include "SDL.h" // Main function int main(int argc, char* argv[]) { // Initialize SDL if(SDL_Init(SDL_INIT_EVERYTHING) == -1) return(1); // Delay 2 seconds SDL_Delay(2000); // Quit SDL SDL_Quit(); // Return return 0; } </syntaxhighlight> 上述程式會載入所有SDL子系統(出錯則退出程式),然後暫停兩秒,最後關閉SDL並結束程式。 == 與DirectX比較 == 与DirectX比较对应关系如下: {| border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;" |- bgcolor="#CCCCCC" align="center"|- | width=680 |'''SDL''' | width=250 |'''DirectX''' | width=100 |'''說明''' |- | SDL_Video、SDL_Image、OpenGL | DirectDraw、Direct3D | |- | SDL_Audio、SDL_Mixer | DirectSound | |- | SDL_Joystick、SDL_Base | DirectInput | |- | SDL_Net | DirectPlay | |- | SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_Filter | DirectShow | |- |} == 使用SDL開發的作品 == ===開發實例=== <gallery mode="packed-overlay" style="text-align:left"> File:Unknown horizons 3176.PNG| ''{{tsl|en|Unknown Horizons}}'' File:0_A.D._alpha_25_-_playing_as_Spartans.jpg| ''[[0 A.D.]]'' File:Hwscreen.png| ''[[Hedgewars]]'' File:Fretsonfirex1.jpg| ''[[Frets on Fire]]'' File:OpenTTD-0.7.1-de.png|''[[OpenTTD]]'' File:Wesnoth-1.6-5.jpg|''[[韦诺之战|The Battle for Wesnoth]]'' File:OOlite_Mac_OS_X_screenshot.jpg| ''[[Oolite]]'' File:SMC15PromoShot.png| ''[[Secret Maryo Chronicles]]'' File:Trine - Knight Block.jpg| ''[[三位一体 (游戏)|Trine]]'' </gallery> == 其他 == *[[开源游戏列表]] === 遊戲 === *《[[Spore]]》 *《[[Tux Paint]]》 *《[[Simutrans]]》 *《[[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]] === 老游戏的开源实现 === *[https://github.com/sdlpal/sdlpal SDLPAL]{{Wayback|url=https://github.com/sdlpal/sdlpal |date=20180906014338 }} - [[仙剑奇侠传]]的引擎的开源实现 *[http://code.google.com/p/corsix-th/ CorsixTH]{{Wayback|url=http://code.google.com/p/corsix-th/ |date=20100211025433 }} - [[杏林也瘋狂]]的引擎的开源实现 *[https://github.com/scarsty/kys-pascal kys-pascal]{{Wayback|url=https://github.com/scarsty/kys-pascal |date=20170406000749 }} - [[金庸群侠传]]的引擎的开源实现([[PASCAL语言]]) *[https://github.com/scarsty/kys-cpp kys-cpp]{{Wayback|url=https://github.com/scarsty/kys-cpp |date=20180612211436 }} - [[金庸群侠传]]的引擎的开源实现([[C++语言]]) === 其他 === *[[QEMU]] - 模拟器 == SDL的延伸 == * '''[https://web.archive.org/web/20130922091530/http://www.pygame.org/ pygame]'''—針對遊戲開發的Python模組 * '''[http://icculus.org/smpeg/ SMPEG]{{Wayback|url=http://icculus.org/smpeg/ |date=20070208154110 }}'''—SDL [[MPEG]]函式庫 * '''[http://guichan.sourceforge.net Guichan]{{Wayback|url=http://guichan.sourceforge.net/ |date=20200410102806 }}'''—遊戲使用者介面開發函式庫 * '''[http://www.paragui.org ParaGUI]{{Wayback|url=http://www.paragui.org/ |date=20200912054210 }}'''—使用者介面開發函式庫 * '''[http://www.megastormsystems.com/sdk/crm32pro_en.htm CRM32Pro]{{Wayback|url=http://www.megastormsystems.com/sdk/crm32pro_en.htm |date=20070312012722 }}'''—遊戲開發包(SDK) * '''[http://cs-sdl.sourceforge.net SDL.NET]{{Wayback|url=http://cs-sdl.sourceforge.net/ |date=20200510070143 }}'''—使用[[C#]]的[[.NET]]包裝 * {{tsl|en|SFML|SFML}} == 參見 == {{Portal|电子游戏|自由軟體}} * [[DirectX]] * [[OpenGL]] * [[OpenAL]] * [[Allegro]]—跨平台的遊戲開發函式庫 == 参考文献 == {{Reflist}} == 外部链接 == * {{official website}} [[Category:计算机程序库]] [[Category:電子遊戲研發]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息