# Phaser: The game loop

> Learn how the Phaser game loop works through the update function that runs forever, moving objects by changing x and y or calling setVelocity.

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

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

In Phaser in addition to the `preload()` and `create()` scenes, we also have a third [scene](https://flaviocopes.com/phaser-scenes/), called `update()`.

Here is where everything happens.

`preload()` and `create()` are run just once.

`update()` is going to be called forever. It's a never ending loop, that is repeatedly called until our game ends.

In this example, we create a text that slowly moves to the bottom right of the [canvas](https://flaviocopes.com/phaser-canvas/):

```js
let text

function create() {
  text = this.add.text(100, 100, 'test')
}

function update() {
  text.x += 1
  text.y += 1
}

const game = new Phaser.Game({
  width: 400,
  height: 400,
  scene: {
    create,
    update
  }
})
```

Note how I added `let text` at the top, so we can reference it inside both `create()` and `update()`.

In `update()` I modified the `x` and `y` properties. You can modify other properties, for example you can modify `angle` to rotate an object:

```js
function update() {
  text.angle += 2
}
```

You can make an object start with a specific velocity.

Call `setVelocity()` and pass a number for the X axis, and another optional for the Y axis:

```js
text.setVelocity(20, 20)
```

Or use `setVelocityX()` and `setVelocityY()` to only set one of the 2 axis.
