1. 初始化——在 Golang 透過 Ebiten(炸蝦)來製作 8-Bit 遊戲!

Ebiten(海老天)是由一個基於 Golang 的 8 Bit 遊戲引擎,至於什麼是「海老天」呢⋯⋯其實就是「炸蝦」或「天婦羅」啦。

順帶一提,Ebiten 是跨平台支援的,看看官網上的說明,包含這些平台:

  • 桌上型系統:Windows, Mac OS X, Linux
  • 移動型系統:Android, iOS
  • 網頁瀏覽器:Chrome and Firefox (GopherJS)

而且官網已經有許多的範例可以讓你進行實作了。你也可以在這裡看到官方 Go Doc 文件

預先準備

要用 Ebiten 之前我們就必須先獲取這個套件,其方法很簡單,讓我們先 go get Ebiten 吧!

$ go get github.com/hajimehoshi/ebiten

撰寫你的第一個 Ebiten 程式

當你有了 Ebiten 套件之後,接下來該做的事情就是開始撰寫你的第一個 Ebiten 程式了!

引用套件

接著我們要在程式中引用 Ebiten,如此一來等一下才能夠使用 Ebiten,將下面這段放在你程式中的最上方吧。

package main

import (  
    "github.com/hajimehoshi/ebiten"
    "github.com/hajimehoshi/ebiten/ebitenutil"
)

螢幕更新和顯示

在遊戲中任何東西都是不斷更新的,所以你時常可以聽見「遊戲幀數」也就是「Frames per second」(FPS),意思是每秒的遊戲格數,所以我們如果要讓螢幕上的東西動起來,我們就必須一直更新螢幕,不斷地更新,而且還要讓玩家感覺不到延遲

在此舉例,我們希望在螢幕上顯示文字,但總不可能閃一下就沒了,對吧?所以我們要在一個會不斷重複的函式裡新增一行會顯示文字的程式碼,這點稍後會提到如何讓該程式不斷地重複

我們可以透過除錯用的文字顯示函式 ebitenutil.DebugPrint(image, text) 來將我們要的文字顯示到螢幕上。

func update(screen *ebiten.Image) error {  
    ebitenutil.DebugPrint(screen, "Our first game in Ebiten!")

    return nil
}

screen *ebiten.Image 值其實就是 Ebiten 中的畫布(你可以看作是遊戲畫面),所以我們打算透過 ebitenutil.DebugPrint 在遊戲中顯示一段 Our first game in Ebiten! 文字。

但這還沒好,因為你需要讓 Ebiten 執行你的 update() 函式

Ebiten 初始化

是時候配置 Ebiten 了,你需要透過 ebiten.Run(update, width, height, scale, title) 來設定你的遊戲,並且告訴 Ebiten 應該重複執行哪一個函式,這樣遊戲才會真正地開始。

  • update 需要傳入一個函式,這個函式會在每一幀呼叫,指的就是一個會不斷更新的函式,沒錯!就是我們上面剛才所撰寫的函式。
  • widthheight 就是這個遊戲的視窗寬度高度
  • scale 則是視窗的放大倍數
  • title 是遊戲的視窗標題

事不宜遲,讓我們趕快來設置我們自己的遊戲吧!

func main() {  
    ebiten.Run(update, 320, 240, 2, "Hello world!")
}

這將會生成一個 320x240 而且放大兩倍,視窗標題為 Hello world! 的遊戲。

總結

這裡是一個完整的範例,怎麼?其實很短吧?稍稍暸解之後就趕緊執行它吧。

package main

import (  
    "github.com/hajimehoshi/ebiten"
    "github.com/hajimehoshi/ebiten/ebitenutil"
)

func update(screen *ebiten.Image) error {  
    ebitenutil.DebugPrint(screen, "Our first game in Ebiten!")
    return nil
}

func main() {  
    ebiten.Run(update, 320, 240, 2, "Hello world!")
}

執行程式

你的第一個由 Golang 撰寫的 Ebiten 程式已經完成了!現在透過下列指令就可以執行了。

go run ./main.go  

之後讓我們移動到下一章吧,實際上一個只有文字的東西可稱不上是遊戲呢!