package hero import ( "image" "image/color" _ "image/gif" "os" "github.com/hajimehoshi/ebiten/v2" ) var ( spriteBack1 *ebiten.Image spriteBack2 *ebiten.Image spriteFront1 *ebiten.Image spriteFront2 *ebiten.Image spriteLeft1 *ebiten.Image spriteLeft2 *ebiten.Image spriteRight1 *ebiten.Image spriteRight2 *ebiten.Image ) func init() { spriteBack1 = loadSprite("assets/hero/avt1_bk1.gif") spriteBack2 = loadSprite("assets/hero/avt1_bk2.gif") spriteFront1 = loadSprite("assets/hero/avt1_fr1.gif") spriteFront2 = loadSprite("assets/hero/avt1_fr2.gif") spriteLeft1 = loadSprite("assets/hero/avt1_lf1.gif") spriteLeft2 = loadSprite("assets/hero/avt1_lf2.gif") spriteRight1 = loadSprite("assets/hero/avt1_rt1.gif") spriteRight2 = loadSprite("assets/hero/avt1_rt2.gif") } func loadSprite(path string) *ebiten.Image { file, err := os.Open(path) if err != nil { panic(err) } defer file.Close() img, _, err := image.Decode(file) if err != nil { panic(err) } bounds := img.Bounds() rgba := image.NewRGBA(bounds) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { r, g, b, a := img.At(x, y).RGBA() if r > 0xf000 && g > 0xf000 && b > 0xf000 { rgba.Set(x, y, color.RGBA{0, 0, 0, 0}) } else { rgba.Set(x, y, color.RGBA{ R: uint8(r >> 8), G: uint8(g >> 8), B: uint8(b >> 8), A: uint8(a >> 8), }) } } } return ebiten.NewImageFromImage(rgba) }