Temos algumas plataformas prontas para uso, mas ningu├®m para correr nelas. Vamos corrigir isso.

Crie uma nova variável chamada player e adicione o seguinte código à função create. Você pode encontrar em part5.html:

player = this.physics.add.sprite(100, 450, 'dude');

player.setBounce(0.2);
player.setCollideWorldBounds(true);

this.anims.create({
    key: 'left',
    frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }),
    frameRate: 10,
    repeat: -1
});

this.anims.create({
    key: 'turn',
    frames: [ { key: 'dude', frame: 4 } ],
    frameRate: 20
});

this.anims.create({
    key: 'right',
    frames: this.anims.generateFrameNumbers('dude', { start: 5, end: 8 }),
    frameRate: 10,
    repeat: -1
});

H├í duas coisas diferentes acontecendo aqui: a cria├º├úo de um Physics Sprite e a cria├º├úo de umas anima├º├Áes que ele pode utilizar.

Sprite com Física

A primeira parte do c├│digo cria o sprite:

player = this.physics.add.sprite(100, 450, 'dude');

player.setBounce(0.2);
player.setCollideWorldBounds(true);

Isso cria um novo sprite chamado player, posicionado a 100 x 450 pixels da parte inferior do jogo. O sprite foi criado atrav├®s do Factory Physics Game Object (this.physics.add), que significa que ele possui um corpo de F├¡sica din├ómico por padr├úo.

Depois de criar o sprite, ├® dado um leve fator de ressalto de 0,2. Isto significa que quando aterrissar depois de pular, ele saltar├í muito levemente. O sprite ├® ent├úo definido para colidir com os limites do mundo do jogo. Os limites, por padr├úo, est├úo do lado de fora das dimens├Áes do jogo. Como definimos o jogo como sendo 800 x 600, o jogador n├úo poder├í correr fora desta ├írea. Isso impedir├í que o player saia das bordas da tela ou salte pela parte superior.

Anima├º├Áes

Voltando sua aten├º├úo para a fun├º├úo preload, ver├í que o personagem 'dude' foi carregado como uma sprite sheet, n├úo uma imagem. Isso ├® porque cont├®m quadros de anima├º├úo. ├ë assim que o sprite sheet completo se parece:

image

Há 9 quadros no total, 4 para correr à esquerda, 1 para olhar para a câmera e 4 para correr à direita. Nota: O Phaser suporta virar os sprites para salvar quadros de animação, mas, para este tutorial, vamos mantê-lo no modo antigo.

N├│s definimos duas anima├º├Áes chamadas 'left' e 'right'. Aqui est├í a anima├º├úo da esquerda:

this.anims.create({
    key: 'left',
    frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }),
    frameRate: 10,
    repeat: -1
});

A animação 'left' usa quadros 0, 1, 2 e 3 e roda a 10 quadros por segundo. O valor 'repeat -1' diz para a animação fazer um loop.

Este ├® o nosso ciclo de corrida padr├úo e o repetimos para correr na dire├º├úo oposta, usando a tecla 'direita'.

Informa├º├úo Extra: No Phaser 3, o Animation Manager ├® um sistema global. Anima├º├Áes criadas dentro dele est├úo dispon├¡veis globalmente para todos os Objetos do Jogo. Eles compartilham os dados b├ísicos de anima├º├úo enquanto gerenciam suas pr├│prias timelines. Isso permite definir uma ├║nica anima├º├úo uma vez e aplic├í-la a quantos Objetos forem necess├írios. Isso ├® diferente do Phaser 2, no qual as anima├º├Áes pertenciam especificamente aos Objetos em que foram criados.