見出し画像

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)

なるほど。たしかにこれでもビルドが通った。
勉強になりました。

もう少し遊んでみます。

この記事が気に入ったらサポートをしてみませんか?