# Phaser: Animations

> Learn how to animate a sprite in Phaser by loading a sprite sheet and building the animation with this.anims.create, setting frame rate and repeat.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2021-04-23 | Topics: [Phaser](https://flaviocopes.com/tags/phaser/) | Canonical: https://flaviocopes.com/phaser-animations/

> This post is part of a Phaser series. [Click here](https://flaviocopes.com/phaser-setup/) to see the first post of the series.

To play an animation on a sprite after you create it:

```js
function preload() {
  this.load.sprite('dog', 'dog.png')
}

function create() {
  this.add.sprite(400, 200, 'dog')
}
```

You first have to load a Sprite sheet.

A sprite sheet is a set of different sprites included in a single image.

You load a sprite sheet telling Phaser what are the width and height of each image contained in the sheet. in this case 20x20 pixels:

```js
this.load.spritesheet('dog', 'dog.png', {
  frameWidth: 20,
  frameHeight: 20
})
```

Once you do so, you can generate an animation using `this.anims.create()`:

```js
this.anims.create({
  key: 'animate_dog',
  frames: this.anims.generateFrameNames('dog'),
  frameRate: 20,
  repeat: -1
})
```

Here we say to use the frames from the sprite sheet, animate at 20 frames per second, and repeat forever.

To start the animation we must call

```js
this.ship1.play('ship1_anim')
```

This animation will repeat forever.

You can also perform an animation just once, and make the sprite sheet disappear after the animation is done, by adding those options:

```js
repeat: 0,
hideOnComplete: true
```

and instead of running through all the frames in a sprite sheet, you can iterate through a fraction of them:

```js
frames: this.anims.generateFrameNames('dog', {
  start: 0,
  end: 2
})
```

This is useful especially when you have a big sprite sheet that contains multiple objects.
