Aseprite animation player for Ebitengine.
Note
Only the topmost visible layer is considered. Others are ignored..
fly, _ = aseplayer.NewAnimPlayerFromAsepriteFile("bird.ase")Each Aseprite Tag is imported as an Animation{} struct and is ready to play.
To play multiple animation tags simultaneously, use a shallow copy of AnimPlayer. It will share the same animations. Update each AnimPlayer with Update() and draw it with Draw().
bird1, _ = aseplayer.NewAnimPlayerFromAsepriteFile("bird.ase", aseplayer.Default)
bird2 = *bird1
bird3 = *bird1
bird1.Play("fly")
bird2.Play("fly")
bird3.Play("walk")AsePlayer supports three Animation Directions: Forward, Reverse, and Ping-pong.
Note
For Ping-Pong and Reverse playback, the []Frame is specifically manipulated. For Ping-Pong, the number of frames will be greater than the Aseprite range. [0 1 2 3] -> [0 1 2 3 2 1]. Reverse is an reversed []Frame.
AsePlayer supports the Repeat property; Animation.Repeat = 0 means infinite loop.
// Override.
g.animPlayer.Animations["turn"].Repeat = 1Text field of Aseprite Tag's User Data. It is useful for data transfer. It can be automated with Aseprite Lua scripting. https://www.aseprite.org/api/tag#tagdata
Frame durations are supported. The animation plays according to these durations.
// Override frame's duration.
animPlayer.Animations["walk"].Frames[2].Duration = time.Millisecond * 100A pseudo-code for basic usage with Play()
func (g *Game) Update() error {
if inpututil.IsKeyJustPressed(ebiten.KeyRight) {
g.AnimPlayer.Play("walk")
}
if inpututil.IsKeyJustPressed(ebiten.KeySpace) {
g.AnimPlayer.Play("jump")
}
// Update AnimPlayer
g.myAnimPlayer.Update(aseplayer.Delta)
return nil
}
func (g *Game) Draw(s *ebiten.Image) {
// Draw AnimPlayer
s.DrawImage(g.myAnimPlayer.CurrentFrame.Image, nil)
}