mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-12-26 18:19:24 +01:00
53 lines
No EOL
1.9 KiB
Markdown
53 lines
No EOL
1.9 KiB
Markdown
# Sprite Animations
|
|
|
|
The **MLEM** package contains a very simple sprite animation system that features different-length frames as well as animation grouping.
|
|
|
|
## Using animations
|
|
You can create an animation like so:
|
|
```cs
|
|
var texture = this.Content.Load<Texture2D>("Textures/TestSprite");
|
|
|
|
// Two-frame animation using a frame time of 0.5 seconds
|
|
var anim1 = new SpriteAnimation(timePerFrame: 0.5F,
|
|
new TextureRegion(texture, 0, 0, 16, 16), new TextureRegion(texture, 16, 0, 16, 16));
|
|
|
|
// Three-frame animation with varying frame times
|
|
var anim2 = new SpriteAnimation(
|
|
new AnimationFrame(new TextureRegion(texture, 0, 0, 16, 16), 0.25F),
|
|
new AnimationFrame(new TextureRegion(texture, 16, 0, 16, 16), 0.5F),
|
|
new AnimationFrame(new TextureRegion(texture, 32, 0, 16, 16), 0.3F)
|
|
);
|
|
```
|
|
|
|
Additionally, you have to update the animation every update frame in your game's `Update` method:
|
|
```cs
|
|
anim1.Update(gameTime);
|
|
```
|
|
|
|
You can draw the animation's current frame as follows:
|
|
```cs
|
|
this.SpriteBatch.Draw(anim1.CurrentRegion, new Vector2(10, 10), Color.White);
|
|
```
|
|
|
|
## Using animation groups
|
|
Animation groups consist of multiple animations. Each animation in a group has a condition that determines if it should currently be playing.
|
|
|
|
You can create an animation group and add animations to it like so:
|
|
```cs
|
|
var group = new SpriteAnimationGroup();
|
|
// Animation 1 should always play
|
|
group.Add(anim1, () => true, priority: 0);
|
|
// Animation 2 should play if the game has been running for 10 seconds or more
|
|
// Since its priority is higher than anim1's, it will be the one that plays when its condition is true
|
|
group.Add(anim2, () => gameTime.TotalGameTime.TotalSeconds >= 10, priority: 1);
|
|
```
|
|
|
|
As with regular animations, an animation group also has to be updated each update frame:
|
|
```cs
|
|
group.Update(gameTime);
|
|
```
|
|
|
|
You can draw the group's current frame as follows:
|
|
```cs
|
|
this.SpriteBatch.Draw(group.CurrentRegion, new Vector2(10, 10), Color.White);
|
|
``` |