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