ebitengineを触ってみる話
Ebitengineの基本的な流れ
パッケージをインポートする
Update/Draw/Layoutを持つ型を宣言する。
型という表現が気になる。funcだから関数じゃないの?
ebiten.RunGameで起動する。
code:go
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
)
v2を付けること!
v2じゃないパッケージは別物らしい
ebitenutilはデバッグや便利機能が入ってるパッケージ
Updateメソッド
毎秒60回呼び出される
Unityと一緒だからわかりやすいね。
nil以外を返すとゲームが終了する。
一回の呼ぶ出しを1ティックと呼ぶ。
基本ゲーム進行はUpdateメソッドで行う。
Drawメソッド
ディスプレイのリフレッシュレートに合わせて描画を実施する。
モニタに実行頻度が依存するから計算はここでしない方がいいね。
一回の呼び出しを1フレームと呼ぶ。
描画だけ責任を持たせるべき。
Layoutメソッド
引数にウィンドウサイズを取る。
戻り値はscreenの解像度を返す。
screenはdrawメソッドの引数。
一度書いたらあまり変更の機会はない。
code:go
func main() {
ebiten.SetWindowTitle("Ebitengine 入門")
ebiten.SetWindowSize(640, 480)
g := &game{}
if err := ebiten.RunGame(g); err != nil {
panic(err)
}
}
https://scrapbox.io/files/68e8b7626c00684625424263.png
起動時の設定は色々できるらしい
https://scrapbox.io/files/68e8b7d32762e7d8f9898097.png
*game型の変数をebiten.RunDGameに渡してゲームを起動する。
Updateメソッドのエラーがそのままebiten.RunGame(g)の返り値になる。
サンプルではpanicでクラッシュさせている。
ただし、ebiten.Termination という正常終了を意味する特別なエラーをUpdateメソッドが返した時だけ、ゲームを終了させながらも ebiten.RunGame はnilを返します。
% go run .
で起動してみた
https://scrapbox.io/files/68e8bbaa7f020ed6f60b8668.png
キャラクターを動かすところまではやってみたい。
動作させた記事はまた作る。
参考サイト: