要在三天內打造一個可玩的遊戲,你需要一些快速而穩定的好工具。
在十月初,我們的俱樂部馬歇爾大學的 Geeks and Gadgets 參加了首次 Open Jam,這是一個慶祝最佳開源工具的遊戲 Jam。遊戲 Jam 是一種活動,參與者以團隊共同作業的方式來開發有趣的計算機遊戲。Jam 一般都很短,僅有三天,並且非常累。Opensource.com 在八月下旬發布了 Open Jam 活動,足有 45 支遊戲 進入到了競賽中。
我們的俱樂部希望在我們的專案中建立和使用開放原始碼軟體,所以 Open Jam 自然是我們想要參與的 Jam 了。我們提交的遊戲是一個實驗性的遊戲,名為 Mark My Words。我們使用了多種自由和開放原始碼 (FOSS) 工具來開發它;在這篇文章中,我們將討論一些我們使用的工具和我們注意到可能有潛在阻礙的地方。
MilkyTracker 是一個可用於編曲老式電動遊戲中的音樂的軟體包。它是一種音樂聲道器,是一個強大的 MOD 和 XM 檔案建立器,帶有基於特徵網格的模式編輯器。在我們的遊戲中,我們使用它來編曲大多數的音樂片段。這個程式最好的地方是,它比我們其它的大多數工具消耗更少的硬碟空間和記憶體。雖然如此,MilkyTracker 仍然非常強大。
其使用者介面需要一會來習慣,這裡有對一些想試用 MilkyTracker 的音樂家的一些提示:
Ctrl+Z
復原Ctrl+Y
重做另外,把 MilkyTracker 文件頁面 放在手邊。它含有數不清的教學和手冊的連結。一個好的起點是在該專案 wiki 上的 MilkyTracker 指南。
我們的兩個音樂家使用多用途的現代音樂建立工具 LMMS。它帶有一個絕妙的取樣和效果庫,以及多種多樣的靈活的外掛來生成獨特的聲音。LMMS 的學習曲線令人吃驚的低,在某種程度上是因為其好用的節拍/低音線編輯器。
我們對於想試試 LMMS 的音樂家有一個建議:使用外掛。對於 chiptune式音樂,我們推薦 sfxr、BitInvader 和 FreeBoy。對於其它風格,ZynAddSubFX 是一個好的選擇。它配備了各種合成儀器,可以根據您的需要進行更改。
在開放原始碼遊戲開發中,Tiled 是一個流行的貼片地圖編輯器。我們使用它為來為我們在遊戲場景中組合連續的、復古式的背景。
Tiled 可以匯出地圖為 XML、JSON 或普通的圖片。它是穩定的、跨平台的。
Tiled 的功能之一允許你在地圖上定義和放置隨意的遊戲物件,例如硬幣和提升道具,但在 jam 期間我們沒有使用它。你需要做的全部是以貼片集的方式載入物件的影象,然後使用“插入平鋪”來放置它們。
一般來說,對於需要一個地圖編輯器的專案,Tiled 是我們所推薦的軟體中一個不可或缺的部分。
Piskel 是一個畫素藝術編輯器,它的原始檔程式碼以 Apache 2.0 協定 發布。在這次 Jam 期間,們的大多數的影象資源都使用 Piskel 來處理,我們當然也將在未來的工程中使用它。
在這個 Jam 期間,Piskel 極大地幫助我們的兩個功能是洋蔥皮和精靈序列圖匯出。
洋蔥皮功能將使 Piskel 以虛影顯示你編輯的動畫的前一幀和後一幀的,像這樣:
洋蔥皮是很方便的,因為它適合作為一個繪製指引和幫助你在整個動畫進程中保持角色的一致形狀和體積。 要啟用它,只需單擊螢幕右上角預覽視窗下方的洋蔥形圖示即可。
Piskel 將動畫匯出為精靈序列圖的能力也非常有用。精靈序列圖是一個包含動畫所有幀的光柵影象。例如,這是我們從 Piskel 匯出的精靈序列圖:
該精靈序列圖包含兩幀。一幀位於影象的上半部分,另一幀位於影象的下半部分。精靈序列圖通過從單個檔案載入整個動畫,大大簡化了遊戲的程式碼。這是上面精靈序列圖的動畫版本:
在 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 語言來製作我們的遊戲。它是一個指令碼語言,通常被用於文字處理和桌面應用程式開發。它也可以用於遊戲開發,例如像 Angry Drunken Dwarves 和 Ren'Py 這樣的專案所展示的。這兩個專案都使用一個稱為 Pygame 的 Python 庫來顯示圖形和產生聲音,所以我們也決定在 Open Jam 中使用這個庫。
Pygame 被證明是既穩定又富有特色,並且它對我們建立的街機式遊戲來說是很棒的。在低解析度時,庫的速度足夠快的,但是在高解析度時,它只用 CPU 的渲染開始變慢。這是因為 Pygame 不使用硬體加速渲染。然而,開發者可以充分利用 OpenGL 基礎設施的優勢。
如果你正在尋找一個好的 2D 遊戲程式設計庫,Pygame 是值得密切注意的一個。它的網站有 一個好的教學 可以作為起步。務必看看它!
準備發行我們的遊戲是有趣的。我們知道,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 遊戲開發者嗎?你選擇的工具是什麼?務必在下面留下一個評論!