Gérer les changements de maps avec MelonJS

Voici un premier article sur le développement car j’ai constaté que la communauté autour de MelonJS était assez faible. Si vous avez des remarques concernant cet article, n’hésitez pas à m’en faire part. Je débute sur ce framework, il est donc intéressant pour moi de faire partager mes découvertes et comme je dis toujours, écrire un “tuto” permet de mieux comprendre de quoi l’on parle.

Lorsque le niveau est chargé, une méthode est appelée que nous pouvons récupérer et modifier. Il s’agit de me.game.onLevelLoaded. Définissez d’abord une méthode dans votre main que j’ai appelé goToSpawn que vous allez assigné à onLevelLoaded.

Vous pouvez dès à présent tester avec un alert() le changement de niveau avec la méthode classique expliquée dans le tutoriel officiel.

On crée donc une nouvelle entité LevelEntity que l’on nomme “spawnpoint” et qu’on ajoute à notre entityPool.

On définit un nom pour les points de spawn pour pouvoir les récupérer dans notre méthode et on initialise un identifiant global du dernier level visité (ici -1 pour l’initialisation et éviter de mettre le personnage à une position autre que le spawn original lors du chargement du jeu).

Venons-en au code qui nous intéresse :

A partir de ce moment-là, il y a plusieurs façons d’implémenter la position du personnage. Voici mon bidouillage actuel que je compte améliorer dans le futur (je suis toujours preneur si vous avez mieux).

Cette technique a plein d’inconvénients, mais c’est actuellement la seule que j’ai trouvé si on ne veut pas s’embêter à gérer des variables supplémentaires lors de la création de la map (il faudra que j’explore cette solution plus complexe).

Il doit exister d’autres moyens (peut-être plus propre) pour gérer ce problème (en héritant de la classe LevelEntity ?) c’est pourquoi n’hésitez pas à me donner des retours et pourquoi pas m’aiguiller sur des tutos de personnes plus expérimentées.

MàJ du 01/04/13 : Vous pouvez rajouter

dans chaque if pour rendre les changements de map cohérents.