|
| 1 | +--- |
| 2 | +title: Création des plateformes |
| 3 | +layout: guide_step_fr.pug |
| 4 | +download: /assets/platformer/steps/step03.js |
| 5 | +--- |
| 6 | + |
| 7 | +Un jeu de plateforme à besoin de... plateformes, juste? Il existe plusieurs techniques pour gérer des plateformes and la physique y relative. Dans cet atelier, nous allons considérer les plateformes comme des **sprites**, comme n'importe quel autre caractère dans le jeu. |
| 8 | + |
| 9 | +<small>Si c'est la méthode la plus simple, c'est loin d'être la plus efficace.</small> |
| 10 | + |
| 11 | +Une plateforme de taille 4×1 et 1×1 ressembleront à ceci. |
| 12 | + |
| 13 | +  |
| 14 | + |
| 15 | +Comme pour les images, il y a une méthode pour créer des _sprites_ (dans ce cas des `Phaser.Sprite`) et les ajouter automatiquement |
| 16 | + |
| 17 | +Comment séparer la logique du jeu, d'une carte et de notre jeu? L'idée est d'utiliser des fichiers **JSON** représentant chaque niveau. Le répertoire `data` en contient deux pour débuter. |
| 18 | + |
| 19 | +<small>Idéalement ces fichiers sont à générer à l'aide d'un éditeur <em>ad hoc</em>, tel que Tiled.</small> |
| 20 | + |
| 21 | +Si vous ouvrez un de ces fichiers, on peut y voir les plateformes stockées dans un tableau (`[]`). |
| 22 | + |
| 23 | +```javascript |
| 24 | +{ |
| 25 | + "platforms": [ |
| 26 | + {"image": "ground", "x": 0, "y": 546}, |
| 27 | + {"image": "grass:4x1", "x": 420, "y": 420} |
| 28 | + ], |
| 29 | + // .... |
| 30 | +} |
| 31 | +``` |
| 32 | + |
| 33 | +# Tâches |
| 34 | + |
| 35 | +## Charger les données des niveaux |
| 36 | + |
| 37 | +1. Phaser considère les fichiers JSON comme un type d'asset, tel qu'une image. Nous devons donc précharger le fichier de manière similaire. |
| 38 | + |
| 39 | + ```javascript |
| 40 | + PlayState.preload = function () { |
| 41 | + // ... |
| 42 | + this.game.load.json('level:1', 'data/level01.json'); |
| 43 | + }; |
| 44 | + ``` |
| 45 | + |
| 46 | + Comme pour l'image, on donne un nom à l'élément pour pouvoir s'en reservir par la suite. |
| 47 | + |
| 48 | +2. À présent, pour pouvons y accéder dans l'étape `create`. |
| 49 | + |
| 50 | + ```javascript |
| 51 | + PlayState.create = function () { |
| 52 | + //... |
| 53 | + this.loadLevel(this.game.cache.getJSON('level:1')); |
| 54 | + }; |
| 55 | + |
| 56 | + PlayState.loadLevel = function (data) { |
| 57 | + console.log(data); |
| 58 | + }; |
| 59 | + ``` |
| 60 | + |
| 61 | + `console.log()` va afficher le contenu du niveau dans la console du développeur qu'on peut afficher depuis la touche F12 du navigateur. |
| 62 | + |
| 63 | +## Dessiner les plateformes à l'aide de _sprites_ |
| 64 | + |
| 65 | +1. Avant de créer les _sprites_, nous devons précharger toutes les images requises. Et ceci, va dans l'étape `preload`. |
| 66 | + |
| 67 | + ```javascript |
| 68 | + PlayState.preload = function () { |
| 69 | + // ... |
| 70 | + this.game.load.image('ground', 'images/ground.png'); |
| 71 | + this.game.load.image('grass:8x1', 'images/grass_8x1.png'); |
| 72 | + this.game.load.image('grass:6x1', 'images/grass_6x1.png'); |
| 73 | + this.game.load.image('grass:4x1', 'images/grass_4x1.png'); |
| 74 | + this.game.load.image('grass:2x1', 'images/grass_2x1.png'); |
| 75 | + this.game.load.image('grass:1x1', 'images/grass_1x1.png'); |
| 76 | + }; |
| 77 | + ``` |
| 78 | + |
| 79 | +2. À présent, nous pouvons compléter la méthode de chargement du niveau `loadLevel` afin de dessiner les plateformes. Le tableau de plateformes se parcourse à l'aide d'un `forEach`. Le `this` tout seul est lié à comment JavaScript fonctionne en interne. |
| 80 | + |
| 81 | + ```javascript |
| 82 | + PlayState.loadLevel = function (data) { |
| 83 | + data.platforms.forEach(this.spawnPlatform, this); |
| 84 | + }; |
| 85 | + |
| 86 | + PlayState.spawnPlatform = function(platform) { |
| 87 | + this.game.add.sprite(platform.x, platform.y, platform.image); |
| 88 | + }; |
| 89 | + ``` |
| 90 | + |
| 91 | + Rafraîchir le navigateur va laisser apparaître les plateformes à l'écran. |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | +# Vérifications |
| 96 | + |
| 97 | +- Vous pouvez voir les plateformes dessinées sur la fond d'écran; |
| 98 | +- Assurez-vous de bien utiliser `game.add.sprite` et non `game.add.image`. |
0 commit comments