Go言語はじめてみた
Go言語をはじめてみた。
とくに作りたいものがあるわけではないので、とりあえずゲームラブラリで遊んでいます。
Ebitengine - A dead simple 2D game engine for Go
海老天てw
ライブラリの機能としてはかなりシンプル。
ゲームエンジンというよりも描画エンジンと思った方がよさそうですが
入門としてはちょうど良い。
サンプルで遊んでて、少しつまづいたのでメモ。
ドットの後にカッコと型のポインター
アニメーションのサンプルの中で
歩いてる人を描画するところで、わかりづらいところがありました。
Animation - Ebitengine
https://ebitengine.org/ja/examples/animation.html
わかりづらいコード
func (g *Game) Draw(screen *ebiten.Image) {
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(-float64(frameWidth)/2, -float64(frameHeight)/2)
op.GeoM.Translate(screenWidth/2, screenHeight/2)
i := (g.count / 5) % frameCount
sx, sy := frameOX+i*frameWidth, frameOY
// ★これなに!?
screen.DrawImage(runnerImage.SubImage(image.Rect(sx, sy, sx+frameWidth, sy+frameHeight)).(*ebiten.Image), op)
}
最後の行です。
`.(*ebiten.Image)`の意味がわからん。
カーリー化?型のポインターを引数に渡す??
調べてみたら要するのキャストらしい。
簡単化するとこんな感じ。
x := i.(T)
サンプルコードの最終行をわかりやすく分解するとこんな感じ。
// 元の画像から一部分を切り抜いて取得
var img image.Image = runnerImage.SubImage(image.Rect(sx, sy, sx+frameWidth, sy+frameHeight))
// ポインター取得
var b *ebiten.Image = img.(*ebiten.Image)
// 描画
screen.DrawImage(b, op)
なるほど。たしかにこれでもビルドが通った。
勉強になりました。
もう少し遊んでみます。
この記事が気に入ったらサポートをしてみませんか?