Ya tenemos algunas plataformas tentadoras y encantadoras, pero nadie para correr alrededor de ellas. Vamos a cambiar eso.

Crea una nueva variable llamada player y añade el siguiente código a la función create. Puedes ver esto en el archivo 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
});

En este código se están haciendo dos cosas: la creación de un Sprite con físicas y algunas animaciones.

Sprite con físicas

La primera parte del código crea el sprite:

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

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

Esto crea un nuevo sprite llamado player, a 100 x 450 píxeles desde la parte inferior del juego. El sprite se creó a través del sistema de físicas (this.physics.add), lo que significa que tiene un cuerpo de física dinámica por defecto.

Después de crear el sprite se le da un ligero valor de rebote de 0.2. Esto significa que cuando aterrice después de saltar, rebotará ligeramente. También se indica que colisione con los límites del juego. Los límites, por defecto, están fuera de las dimensiones del juego. Como configuramos el juego para que sea de 800 x 600, el personaje no podrá estar fuera de este área. Esto evitará que pueda correr o saltar fuera de los bordes de la pantalla.

Animaciones

Si vuelves a la función preload verás que 'dude' se cargó como una hoja de sprites, no como una imagen. Esto es porque contiene partes de una animación (fotogramas). Así es como se ve la hoja completa:

image

Hay 9 fotogramas en total, 4 para correr a la izquierda, 1 para mirar hacia la cámara y 4 para correr hacia la derecha. Nota: Phaser admite girar sprites para guardar fotogramas de animación, pero por ahora en este tutorial seguiremos usando la vieja escuela.

Definimos dos animaciones, 'left' y 'right'. La animación left es:

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

La animación 'left' usa los fotogramas 0, 1, 2 and 3 y se ejecuta a una velocidad de 10 fotogramas por segundo. El valor'repeat -1' indica que la animación debe volver a empezar cuando termine.

Este es nuestro ciclo de ejecución estándar y se repetirá para correr en la dirección opuesta, usando la tecla 'derecha' y una final para 'girar'.

Información adicional: En Phaser 3 el Administrador de Animaciones es un sistema global. Las animaciones están disponibles globalmente para todos los elementos del juego. Comparten los datos de animación base mientras administran sus propias líneas de tiempo. Esto permite definir una animación una sola vez y aplicarla a tantos elementos del juego como sea necesario. Esto es diferente a Phaser 2, donde las animaciones pertenecían específicamente a los objetos de juego en los que fueron creados.