XAMARIN : mon premier jeu Cross Platform avec CocosSharp - Partie 2 -

Ÿ Etape 5 : Création du décor animé

Dans cette partie, nous allons créer le décor de notre jeu. Il se constitue de plusieurs parties (les layers) que nous allons superposer et animer si nécessaire. Nous allons découvrir deux nouveaux types de classe CocosSharp qui sont les « CCSprite » et les « CCSpriteSheet ». Le premier représente un élément statique de notre jeu, c’est-à-dire une ressource fixe (par exemple un fichier imag) alors que le second se compose de plusieurs éléments statiques qui peuvent être enchainés rapidement afin de créer une animation (exactement comme le principe des dessins animés).

Si nous décomposons notre décor en plusieurs éléments, nous pouvons établir une sorte de cartographie des éléments de type « CCSprite » ou « CCSpriteSheet » à superposer dans le bon ordre :

NomTypeRessource
title.pngCCSprite (Fixe)decor1

 

castle.pngCCSprite (Fixe) 

decor2

smoke.pngCCSpriteSheet (Animé) 

decor3

fire.pngCCSpriteSheet (Animé) 

decor4

Editez la classe « MainScene.cs » en créant une nouvelle méthode privée nommée « CreateBackGround » (profitez-en pour supprimer ou mettre en commentaire notre test permettant d’afficher un label « Bienvenue sur CocosSharp ») :

createbackground

La méthode « CreateBackGround » instancie une classe de type « CCSprite » avec une ressource « title.png ». Cette ressource doit être placé dans le répertoire « Assets/Content » de notre application (Android et iOS) :

assets-content

title

Dans l’univers CocosSharp, les coordonnées (x,y) d’un « CCSprite » sont positionnées au milieu de la ressource. La propriété « AnchorPoint » permet de les redéfinir. Ainsi, nous indiquons que le centre de la ressource est maintenant en bas à gauche et non au milieu. Voici un exemple sans et avec :

anchorpoint

Enfin, la propriété « IsAntiAliased » permet de ne pas lisser la ressource. C’est le cas ici car nous voulons avoir un aspect pixélisé pour avoir le rendu « rétro gaming ».

N’oubliez pas de rajouter les ressources au projet iOS (vous pouvez les ajouter en tant que lien pour éviter de multiplier les fichiers identiques) :

ressources-ios-1ressources-ios-2

Comme pour le fond, rajoutez maintenant le château en créant une nouvelle méthode « CreateCastle ». N’oubliez pas l’appel de la méthode dans le constructeur de notre scène :

createcastle

Le château n’est pas placé correctement sur l’axe des y. Il devrait être « docké » vers le haut. Définissez la propriété « PositionY » ainsi :

positiony

Pour rajouter la fumée, créez une nouvelle méthode « CreateSmoke ». Cette méthode utilisera « CreateAnimationFromSpriteSheet » qui permet à partir d’une liste d’extraire tous les sprites afin de les enchainer rapidement, créant ainsi notre animation :

createsmoke

Note : N’oubliez pas de rajouter les ressources smoke.plist et smoke.png aux projet Android et iOS.

Exécuter le projet (Android ou iOS) :

executer-le-projet

La fumée s’anime mais elle est au-dessus de notre château. C’est normal puisque les « layers » s’ajoutent dans l’ordre de création. Il faut donc positionner notre méthode avant l’ajout du château comme ceci :

positionner-methode-avant-chateau

De la même façon, rajoutez le feu au château et notre décor animé sera complet :

ajout-feu

Exécuter le projet (Android ou iOS) :

executer-projet-2 executer-projet-3

Ÿ Etape 6 : Création des acteurs

Dans cette partie, nous allons créer les personnages qui tiennent le trampoline : Mario et Luigi. Dans ce jeu, ils se trouvent sur le chemin et tiennent une sorte de planche qui permettra à Yoshi de rebondir jusqu’au carrosse et ainsi être sauvé. C’est trop mignon n’est-ce pas ? C’est l’utilisateur qui contrôlera les deux personnages en les faisant naviguer soit vers la gauche soit vers la droite. Trois positions sont possibles pour afficher les deux personnages :

personnages-mario

Dans le fichier « MainScene.cs », rajoutez trois nouvelles méthodes :

methodes-mainscene

Notez que nous cachons les personnages au centre et à droite pour ne laisser que ceux de gauche par défaut au démarrage du jeu. N’oubliez pas d’appeler ces trois méthodes dans le constructeur de votre classe et de rajouter les ressources dans les deux projets :

createmarioluigi

Exécutez le projet (Android ou iOS) :

executer-projet-4

Rajoutez le carrosse situé complétement à droite. C’est la porte de sortie pour notre personnage Yoshi :

carrosse

Note : N’oubliez pas de rajouter les ressources goal.plist et goal.png aux projet Android et iOS.

Ÿ Etape 7 : Animation des acteurs

Pour animer les deux personnages, ajoutez une nouvelle méthode « CreateTouchListener » :

createtouchlistener

Le listener va « attraper » tous les « taps » sur l’écran (« CCEventListenerTouchAllAtOnce ») et exécuter la méthode « HandleTouchesBegan ». Celle-ci analyse si un « tap » ou un « click » utilisateur a été déclenché et regarde ou l’utilisateur a appuyé. Nous avions, lors de la création de la classe « GameView » défini la taille de l’écran ainsi :

gameview

Donc si la coordonnée X de l’appui de l’utilisateur est <120, alors c’est un click gauche, sinon click droit. En fonction de cela, il ne nous reste plus qu’à rendre visible les bons personnages suivant la position actuelle de celui déjà affiché. N’oubliez pas d’ajouter dans le constructeur de la scène l’appel de la méthode « CreateTouchListener ».

Exécutez le projet (Android ou iOS) et testez les clicks ou taps à droite et à gauche :

executer-projet-5

Ÿ Etape 7 : Le lancée de Yoshi (un peu de math…)

Rajoutez la méthode « CreateYoshi ». N’oubliez pas de l’appeler dans le constructeur de la scène et avant la méthode « CreateGoal » car Yoshi doit passer derrière le carrosse pour plus de réalisme :

creategoal

Attention, on attaque la partie un peu pénible pour ceux qui sont allergiques avec les mathématiques. Vous pouvez passer cet étape et copier-coller le code tel quel si vous voulez. Pour les autres, un peu de théorie :

theorie-math

Voici le mouvement que va suivre notre Yoshi. Il va se jeter du château en suivant une parabole et son mouvement va accélérer au fur et à mesure de sa descente jusqu’à ce qu’il rencontre soit le trampoline soit le sol. S’il rencontre le trampoline, alors on inverse la courbe mais il ira moins haut. S’il rencontre le sol, la partie est finie et notre pauvre Yoshi aussi…

Cela se traduit donc par trois boucles sur lesquels nous allons itérer pour calculer les coordonnées de i et y en fonction de chaque point x :

Boucleiy
1(x-X1).((pi/2)/(X2-X1))(abs(cos(i))*(Y1-Y0)) + Y0
2((x-X2).(pi)/(X3-X2))+(pi/2)(abs(cos(i))*(Y2-Y0)) + Y0
3((x-X3).(pi)/(X4-X3))+(pi/2)(abs(cos(i))*(Y3-Y0)) + Y0

 

Bon, le but n’est pas de faire des mathématiques alors mettons en place cela. Nous allons rajouter la méthode CocosSharp « Schedule » qui permet d’effectuer tout ce que l’on a besoin de faire durant un temps exprimé en frame (rafraichissement de l’écran). En résumé, à chaque rafraichissement de l’écran, cette méthode est appelée :

cocossharp-schedule

cocossharp-schedule

Dans le constructeur de la scène on rajoute la méthode suivante :

logique-du-jeu

La méthode « RunGameLogic » appelle en début de procédure une autre méthode « JumpYoshi » qui permet de réinitialiser notre héros une fois qu’il est arrivé au carrosse. Par contre, s’il tombe, alors c’est la méthode « CreateYoshiBoom » qui affichera Yoshi à l’endroit de la chute avec une animation particulière :

rungamelogic

Note : N’oubliez pas de rajouter les ressources yoshiboum.plist et yoshiboum.png aux projet Android et iOS.

Exécutez le projet (Android ou iOS) :

executer-projet-6

Conclusion

Voilà un rapide aperçu de la bibliothèque CocosSharp pour Xamarin. Evidemment, notre jeu est loin d’être fini et Il faudrait intégrer la notion de score, pouvoir paramétrer la difficulté, lancer plusieurs Yoshi en même temps, ect… Les idées ne manquent pas mais vous avez tous les éléments pour continuer ce petit jeu style « rétro gaming ».

CocosSharp rempli véritablement son contrat avec Xamarin. Une seule classe partagée permet le déploiement sur toutes les plateformes mobiles. Avec ses milliers de possibilités et son moteur de physique intégré, c’est la solution idéale pour commencer la programmation de jeu qui n’auront qu’une seule limite : vous !

0 commentaires

votre commentaire

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Inscription newsletter

Ne manquez plus nos derniers articles !