Également disponible en en.
Le caractère principal
Le héro ou héroïne ne notre jeu sera un autre sprite. Cependant ce sprite est plus complexe que les plateformes. Il y a plus de logiques associées au joueur comme le déplacement, le saut, etc.
Il semblerait judicieux d'ajouter des méthodes comme sauter (jump
) ou se déplacer (move
). On fait ceci est dérivant (appelé héritage) Phaser.Sprite
.
En JavaScript, le patron de conception suivant utilisé. Imaginons que nous devions créer une classe voiture (Car
) spécialisant une classe véhicule (Vehicle
).
function Car() {
// call parent constructor
Vehicle.call(this);
}
// clone Vehicle's prototype into Car
Car.prototype = Object.create(Vehicle.prototype);
// restore the constructor at Car
Car.prototype.constructor = Car;
Nous allons nous en servir pour spécialiser Phaser.Sprite
.
Tâches
Charger l'image du héro
Dans l'étape
preload
, ajouter le chargement de l'imagehero_stopped.png
.PlayState.preload = function () { // ... this.game.load.image('hero', 'images/hero_stopped.png'); };
Spécialiser
Phaser.Sprite
Ajoutez la définition du héro dans
main.js
. On suit le patron d'héritage utilisé en JavaScript.function Hero(game, x, y) { // Appel le constructeur de Phaser.Sprite Phaser.Sprite.call(this, game, x, y, 'hero'); } // inherit from Phaser.Sprite Hero.prototype = Object.create(Phaser.Sprite.prototype); Hero.prototype.constructor = Hero;
Afficher le héro à la création
Comme pour les plateformes, la position du héro est donnée dans le fichier JSON. Nous créons une nouvelle méthode permettant d'afficher les caractères.
PlayState.loadLevel = function (data) { //... this.spawnCharacters({hero: data.hero}); };
PlayState.spawnCharacters = function (data) { this.hero = new Hero(this.game, data.hero.x, data.hero.y); this.game.add.existing(this.hero); };
Après rafraichissement de la page, le personnage apparaît... cependant il semble mal positionné.
Phaser gère le positionnement d'un sprite à l'aide d'un ancre (
anchor
). C'est un vecteur x, y allant de 0 à 1 (gauche - droite, haut - bas). Afin de center le héro, il faut le placer à la position(0.5, 0.5)c)
. Modifier le constructeur du héro de la manière suivante.function Hero(game, x, y) { // ... this.anchor.set(0.5, 0.5); }
Et voilà, le héro à désormais les pieds sur terre.
Vérifications
- Il y a un personnage sur le sol positionné en bas à gauche du niveau.
Téléchargement
Êtes-vous bloqué? Jetez un œil au code source de cette étape.