【Go】試玩遊戲開發引擎 ebiten

更新於 發佈於 閱讀時間約 2 分鐘

前言

假期間翻找學習資源,找到了一個用go進行遊戲開發的課程,雖然在遊戲產業還是以C#的Unity engine或godot較廣為人知,go就拿來試試看,順便玩一下實作,找點實際應用的感覺。


開發框架Ebitengine

Ebitengine是一個使用go語言進行開發遊戲的引擎,可以簡單快速的開發2D遊戲,部署到跨平台上運行。對於windows系統的開發者來說,只要go安裝完成,即可進行一般套件管理後進行開發,如果是mac或是Linux,則需要多安裝C語言的編譯器。


 Go 版本須為1.22 以上,WSL使用者則需要GOOS=windows 的環境變數


專案初始化

創建一個新資料夾,打開終端機鍵入go mod init <專案名稱>進行初始化,自動產生go.mod檔案,紀錄專案依賴版本資訊。

module go-game


go 1.23.0


輸入指令go get github.com/hajimehoshi/ebiten/v2,安裝ebiten依賴,完成後自動產生go.sum。此時如果在後續開發中還是找不到依賴,記得下go mod tidy指令進行刷新。


官方範例

// 省略import​

type Game struct{}

func (g *Game) Update() error {
return nil
}

func (g *Game) Draw(screen *ebiten.Image) {
ebitenutil.DebugPrint(screen, "Hello, World!")
}

func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
return 320, 240
}

func main() {
ebiten.SetWindowSize(640, 480)
ebiten.SetWindowTitle("Hello, World!")
if err := ebiten.RunGame(&Game{}); err != nil {
log.Fatal(err)
}
}

基本內容就是實作引擎所提供的Gameinterface,實作方式類似Duck Typing,只要行為符合interface的定義就算是完成實作。

以範例來說,即自定義的Game struct需要有符合下列三個function signiturereceiver function (method)

  • Update() error
  • Draw(screen *Image)
  • Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int)


階段進度




目前暫時是完成這些處理

  1. 嵌入靜態資源圖檔,更新繪製在畫面上
  2. 偵測按鍵輸入,左右鍵旋轉,上鍵前進
  3. 邊界處理


後記

遊戲開發是能學到不少東西,尤其是要管理大量的物件生命週期,各種為了維護性而套用的架構,以及久違拿出來用的高中數學,好險sin、cos跟向量都還記得,不至於看不懂為什麼做出來的公式是要這樣套。

總而言之,一方面延伸了解一下遊戲開發的機制,一方面熟悉一下go語言的語法。






留言
avatar-img
留言分享你的想法!
avatar-img
Err500
12會員
78內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
你可能也想看
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
Steam上的遊戲製作工具那麼多,到底哪個比較好用呢? 我只能說,每個人的能力和想製作的遊戲類型都不同,適合的工具當然也不會一樣,只能你自己去選擇最適合的。 雖然沒有辦法推薦最適合你的,但可以告訴你避開地雷工具的訣竅!
Thumbnail
Steam上的遊戲製作工具那麼多,到底哪個比較好用呢? 我只能說,每個人的能力和想製作的遊戲類型都不同,適合的工具當然也不會一樣,只能你自己去選擇最適合的。 雖然沒有辦法推薦最適合你的,但可以告訴你避開地雷工具的訣竅!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News