用于游戲開發(fā)的圖形和音樂工具
要在三天內(nèi)打造一個可玩的游戲,你需要一些快速而穩(wěn)定的好工具。
在十月初,我們的俱樂部馬歇爾大學(xué)的 Geeks and Gadgets 參加了首次 Open Jam,這是一個慶祝最佳開源工具的游戲 Jam。游戲 Jam 是一種活動,參與者以團隊協(xié)作的方式來開發(fā)有趣的計算機游戲。Jam 一般都很短,僅有三天,并且非常累。Opensource.com 在八月下旬發(fā)布了 Open Jam 活動,足有 45 支游戲 進入到了競賽中。
我們的俱樂部希望在我們的項目中創(chuàng)建和使用開放源碼軟件,所以 Open Jam 自然是我們想要參與的 Jam 了。我們提交的游戲是一個實驗性的游戲,名為 Mark My Words。我們使用了多種自由和開放源碼 (FOSS) 工具來開發(fā)它;在這篇文章中,我們將討論一些我們使用的工具和我們注意到可能有潛在阻礙的地方。
音頻工具
MilkyTracker
MilkyTracker 是一個可用于編曲老式視頻游戲中的音樂的軟件包。它是一種音樂聲道器,是一個強大的 MOD 和 XM 文件創(chuàng)建器,帶有基于特征網(wǎng)格的模式編輯器。在我們的游戲中,我們使用它來編曲大多數(shù)的音樂片段。這個程序最好的地方是,它比我們其它的大多數(shù)工具消耗更少的硬盤空間和內(nèi)存。雖然如此,MilkyTracker 仍然非常強大。
其用戶界面需要一會來習(xí)慣,這里有對一些想試用 MilkyTracker 的音樂家的一些提示:
- 轉(zhuǎn)到 “Config > Misc.” ,設(shè)置編輯模式的控制風(fēng)格為 “MilkyTracker”,這將給你提供幾乎全部現(xiàn)代鍵盤快捷方式。
- 用
Ctrl+Z
撤銷 - 用
Ctrl+Y
重做 - 用空格鍵切換模式編輯方式
- 用退格鍵刪除先前的音符
- 用插入鍵來插入一行
- 默認(rèn)情況下,一個音符將持續(xù)作用,直到它在該頻道上被替換。你可以明確地結(jié)束一個音符,通過使用一個反引號(`)鍵來插入一個 KeyOff 音符
- 在你開始譜寫樂曲前,你需要創(chuàng)建或查找采樣。我們建議在諸如 Freesound 或 ccMixter 這樣的網(wǎng)站上查找采用 Creative Commons 協(xié)議的采樣,
另外,把 MilkyTracker 文檔頁面 放在手邊。它含有數(shù)不清的教程和手冊的鏈接。一個好的起點是在該項目 wiki 上的 MilkyTracker 指南。
LMMS
我們的兩個音樂家使用多用途的現(xiàn)代音樂創(chuàng)建工具 LMMS。它帶有一個絕妙的采樣和效果庫,以及多種多樣的靈活的插件來生成獨特的聲音。LMMS 的學(xué)習(xí)曲線令人吃驚的低,在某種程度上是因為其好用的節(jié)拍/低音線編輯器。
我們對于想試試 LMMS 的音樂家有一個建議:使用插件。對于 chiptune式音樂,我們推薦 sfxr、BitInvader 和 FreeBoy。對于其它風(fēng)格,ZynAddSubFX 是一個好的選擇。它配備了各種合成儀器,可以根據(jù)您的需要進行更改。
圖形工具
Tiled
在開放源碼游戲開發(fā)中,Tiled 是一個流行的貼片地圖編輯器。我們使用它為來為我們在游戲場景中組合連續(xù)的、復(fù)古式的背景。
Tiled 可以導(dǎo)出地圖為 XML、JSON 或普通的圖片。它是穩(wěn)定的、跨平臺的。
Tiled 的功能之一允許你在地圖上定義和放置隨意的游戲?qū)ο?,例如硬幣和提升道具,但?jam 期間我們沒有使用它。你需要做的全部是以貼片集的方式加載對象的圖像,然后使用“插入平鋪”來放置它們。
一般來說,對于需要一個地圖編輯器的項目,Tiled 是我們所推薦的軟件中一個不可或缺的部分。
Piskel
Piskel 是一個像素藝術(shù)編輯器,它的源文件代碼以 Apache 2.0 協(xié)議 發(fā)布。在這次 Jam 期間,們的大多數(shù)的圖像資源都使用 Piskel 來處理,我們當(dāng)然也將在未來的工程中使用它。
在這個 Jam 期間,Piskel 極大地幫助我們的兩個功能是洋蔥皮和精靈序列圖導(dǎo)出。
洋蔥皮
洋蔥皮功能將使 Piskel 以虛影顯示你編輯的動畫的前一幀和后一幀的,像這樣:
洋蔥皮是很方便的,因為它適合作為一個繪制指引和幫助你在整個動畫進程中保持角色的一致形狀和體積。 要啟用它,只需單擊屏幕右上角預(yù)覽窗口下方的洋蔥形圖標(biāo)即可。
精靈序列圖導(dǎo)出
Piskel 將動畫導(dǎo)出為精靈序列圖的能力也非常有用。精靈序列圖是一個包含動畫所有幀的光柵圖像。例如,這是我們從 Piskel 導(dǎo)出的精靈序列圖:
該精靈序列圖包含兩幀。一幀位于圖像的上半部分,另一幀位于圖像的下半部分。精靈序列圖通過從單個文件加載整個動畫,大大簡化了游戲的代碼。這是上面精靈序列圖的動畫版本:
Unpiskel.py
在 Jam 期間,我們很多次想批量轉(zhuǎn)換 Piskel 文件到 PNG 文件。由于 Piskel 文件格式基于 JSON,我們寫一個基于 GPLv3 協(xié)議的名為 unpiskel.py 的 Python 小腳本來做轉(zhuǎn)換。
它像這樣被調(diào)用的:
python unpiskel.py input.piskel
這個腳本將從一個 Piskel 文件(這里是 input.piskel
)中提取 PNG 數(shù)據(jù)幀和圖層,并將它們各自存儲。這些文件采用模式 NAME_XX_YY.png
命名,在這里 NAME
是 Piskel 文件的縮減名稱,XX
是幀的編號,YY
是層的編號。
因為腳本可以從一個 shell 中調(diào)用,它可以用在整個文件列表中。
for f in *.piskel; do python unpiskel.py "$f"; done
Python、Pygame 和 cx_Freeze
Python 和 Pygame
我們使用 Python 語言來制作我們的游戲。它是一個腳本語言,通常被用于文本處理和桌面應(yīng)用程序開發(fā)。它也可以用于游戲開發(fā),例如像 Angry Drunken Dwarves 和 Ren'Py 這樣的項目所展示的。這兩個項目都使用一個稱為 Pygame 的 Python 庫來顯示圖形和產(chǎn)生聲音,所以我們也決定在 Open Jam 中使用這個庫。
Pygame 被證明是既穩(wěn)定又富有特色,并且它對我們創(chuàng)建的街機式游戲來說是很棒的。在低分辨率時,庫的速度足夠快的,但是在高分辨率時,它只用 CPU 的渲染開始變慢。這是因為 Pygame 不使用硬件加速渲染。然而,開發(fā)者可以充分利用 OpenGL 基礎(chǔ)設(shè)施的優(yōu)勢。
如果你正在尋找一個好的 2D 游戲編程庫,Pygame 是值得密切注意的一個。它的網(wǎng)站有 一個好的教程 可以作為起步。務(wù)必看看它!
cx_Freeze
準(zhǔn)備發(fā)行我們的游戲是有趣的。我們知道,Windows 用戶不喜歡裝一套 Python,并且要求他們來安裝它可能很過分。除此之外,他們也可能必須安裝 Pygame,在 Windows 上,這不是一個簡單的工作。
很顯然:我們必須放置我們的游戲到一個更方便的格式中。很多其他的 Open Jam 參與者使用專有的游戲引擎 Unity,它能夠使他們的游戲在網(wǎng)頁瀏覽器中來玩。這使得它們非常方便地來玩。便利性是一個我們的游戲中根本不存在的東西。但是,感謝生機勃勃的 Python 生態(tài)系統(tǒng),我們有選擇。已有的工具可以幫助 Python 程序員將他們的游戲做成 Windows 上的發(fā)布版本。我們考慮過的兩個工具是 cx_Freeze 和 Pygame2exe(它使用 py2exe)。我們最終決定用 cx_Freeze,因為它是跨平臺的。
在 cx_Freeze 中,你可以把一個單腳本游戲打包成發(fā)布版本,只要在 shell 中運行一個命令,像這樣:
cxfreeze main.py --target-dir dist
cxfreeze
的這個調(diào)用將把你的腳本(這里是 main.py
)和在你系統(tǒng)上的 Python 解釋器捆綁到到 dist
目錄。一旦完成,你需要做的是手動復(fù)制你的游戲的數(shù)據(jù)文件到 dist
目錄。你將看到,dist
目錄包含一個可以運行來開始你的游戲的可執(zhí)行文件。
這里有使用 cx_Freeze 的更復(fù)雜的方法,允許你自動地復(fù)制數(shù)據(jù)文件,但是我們發(fā)現(xiàn)簡單的調(diào)用 cxfreeze
足夠滿足我們的需要。感謝這個工具,我們使我們的游戲玩起來更便利一些。
慶祝開源
Open Jam 是慶祝開源模式的軟件開發(fā)的重要活動。這是一個分析開源工具的當(dāng)前狀態(tài)和我們在未來工作中需求的一個機會。對于游戲開發(fā)者探求其工具的使用極限,學(xué)習(xí)未來游戲開發(fā)所必須改進的地方,游戲 Jam 或許是最好的時機。
開源工具使人們能夠在不損害自由的情況下探索自己的創(chuàng)造力,而無需預(yù)先投入資金。雖然我們可能不會成為專業(yè)的游戲開發(fā)者,但我們?nèi)匀荒軌蛲ㄟ^我們的簡短的實驗性游戲 Mark My Words 獲得一點點體驗。它是一個以語言學(xué)為主題的游戲,描繪了虛構(gòu)的書寫系統(tǒng)在其歷史中的演變。還有很多其他不錯的作品提交給了 Open Jam,它們都值得一試。 真的,去看看!
在本文結(jié)束前,我們想要感謝所有的 參加俱樂部的成員,使得這次經(jīng)歷真正的有價值。我們也想要感謝 Michael Clayton、Jared Sprague 和 Opensource.com 主辦 Open Jam。簡直酷斃了。
現(xiàn)在,我們對讀者提出了一些問題。你是一個 FOSS 游戲開發(fā)者嗎?你選擇的工具是什么?務(wù)必在下面留下一個評論!