Solar2D Logo

La génèse du projet

La première heure, l'heure des choix techniques.

Lorsque vous décidez de faire un jeu vidéo sur téléphone mobile, vous avez alors un choix crucial à faire concernant le langage et/ou le framework que vous allez utiliser.

  • Lequel vous permettra d’aller au bout de votre projet ?
  • Lequel n’est pas une énorme usine à gaz ?
  • Lequel ne va pas necessiter des mois d'apprentissage ?
  • Lequel dispose d’une communauté qui pourra vous aider en cas de besoin ?

Ce qui est certain, c’est que si vous n’êtes pas une grosse équipe, vous n’allez pas pouvoir développer deux versions différentes de votre jeu pour iOS et Android (et éventuellement d’autres plateformes). Vous allez donc exclure les langages natifs pour le développement de votre jeu et vous orienter vers un moteur de jeu qui va s'occuper de la compatibilité de votre jeu sur les différentes plateformes.

Les deux moteurs de Jeux phare du moment, ceux qui sont les plus utilisés sont clairement Unity 2D et Unreal Engine.
Ces deux moteurs sont très efficaces et rapides. Le nombre incroyable de jeux produits avec ces moteurs, vous garantit que quoi que vous vouliez faire, vous devriez y arriver !

Leur principal avantages c’est qu’ils vous permettent de produire aussi bien des jeu 3D que 2D.
Il existe néanmoins plein d’autres moteurs disponibles, surtout si vous voulez faire un jeu vidéo 2D. Solar2D (anciennement Corona SDK) en est un, mais d'autres choix sont possibles : Löve2D, Godot, Defold, …

Pour Hillgreen, le choix a été vite fait. Manu connaissait déjà Solar2D. Cela faisait longtemps qu’il voulait que je teste ce framework. J’avoue qu’au début, j’étais un peu perplexe, je croyais que Solar2D était une sorte de Flash évolué qui ne permettait pas de réaliser grand-chose, mais comme de retour de vacances je suis toujours de bonne humeur : Un matin de Novembre, j’ai donc décidé d’installer Solar2D.

Solar2D

C’est très léger !

J’entends par là que Solar2D ne vous installe pas (ni ne vous impose) d’IDE incompréhensible. Si vous avez l’habitude d’utiliser un éditeur de texte pour programmer dans un autre langage, vous allez pouvoir le conserver ! Moi j’utilise UltraEdit depuis des siècles. Alors j’apprécie ce choix. Si vous vous rappelez la solitude que vous avez ressenti la première fois que vous avez lancer xCode ou Android Studio, vous comprendrez sans doute ce que je veux dire !
Solar2D vous recommande quand même d’utiliser SublimeText car quelques extensions ont été codées pour cet éditeur. Mais rien ne vous oblige à l’utiliser, d’ailleurs moi je suis resté avec UltraEdit.

La création de projet est rapide !

Encore une fois, c’est la légèreté qui règne dans la gestion de projet !
Lorsque Solar2D crée un projet il ne vous crée que 4 fichiers et 3 dossiers (ces dossiers ne servent qu’à produire des exécutables Android et iOS, et vous n’irez pas mettre le nez dedans pour voir ce qui s'y trouve avant d’être prêt à publier votre programme sur les stores d’Apple et de Google).
Vous allez donc avoir l’impression de comprendre ce que vous faites, et ça c’est toujours agréable!

Premier programme

Une fois ces deux premières satisfactions digérées, il est temps d’aller chercher un tutorial sur Internet pour savoir ce que la bête à dans le ventre.
Solar2D se programme en Lua qui est, disons-le tout de suite l’un des langages les moins efficaces qui soit ! Lua offre des performances similaires à celles de Python. C’est-à-dire qu’il est entre 80 et 100 fois plus lent que le C !
Autant dire que ce point est à prendre en considération lors de votre choix de framework ! Vous n’irez pas faire de multiplication matricielle, ni aucun calcul complexe avec Lua !
La syntaxe de Lua est également légèrement déroutante, mais on s’y fait finalement assez rapidement !
Solar2D propose plusieurs tutoriels sur son site qui vous permettent en quelques minutes (disons une heure si vous voulez tout comprendre) de réaliser vos premiers programmes.
Le code est synthétique et quelques lignes de code vont vous permettre de réaliser des choses très intéressantes. C’est bien là tout l’intérêt de Solar2D. C’est facile et rapide à prendre en main.

Evidement, vous n'allez pas tout comprendre tout de suite et au fur et mesures de vos progrès vous allez vous rendre compte certaines parties de vos programmes auraient pu être mieux codée, mais vous allez programmer très rapidement, surtout au début !

L’émulateur

Solar2D est livré avec un émulateur « intégré ».
Dés qu’un fichier est sauvegardé dans votre projet, votre programme se réexécute dans le simulateur de façon quasiment instantanée. Là encore c’est tellement plus agréable que de devoir recompiler et attendre pour pouvoir tester.
Si vous programmez en HTML, alors vous savez que dès que votre fichier est registré, il vous suffit de faire F5 sur votre navigateur pour rafraichir la page et voir immédiatement vos modifications, et bien là, c'est pareil sauf que vous n'avez même pas à rafraichir la page, cela ce fait tout seul !
Les langages comme Flutter ou React Native, qui sont nettement plus performant, proposent des systèmes de mise à jour temps réél, mais pour connaitre ces deux langages et leur système « Hot Reload » respectifs, je dirais que rien n’est aussi abouti que Solar2D dans ce domaine. Il est à noter que Unity2D lui-aussi réalise ce type de mise à jour instantanée.

Ça moule ou pas ! Là est la vraie question !

Jusque-là, ce que je peux dire que Solar2D, c’est que c’est un très bon moteur de Jeu pour commencer la programmation, car très simple. Ma fille de 12 ans qui veut d’ailleurs se mettre à la programmation (pour faire comme son père 😊 ) à installé Solar2D et a suivi les premiers tutoriels (après que je lui ai traduit en Français !!!) sans trop de soucis. Elle était très contente du résultat, forcément !

Une petite recherche sur internet d’un benchmark ou d’un truc me permettant de savoir ce qu’on peut faire avec solar2D me mène au petit exemple de Markus Ranner :

How to check the actual frame rate (FPS) with Corona SDK

Je teste donc le code proposé.
Et là c’est la bonne surprise, aussi bien sur le simulateur que sur mon téléphone (car fabriquer un apk pour Android ne prend que quelques secondes). C’est plutôt très rapide.

Néanmoins, afficher des carrés n’ayant aucun intérêt pour créer un jeu de plateforme dans le style de Super Mario Bros U, je modifie un peu le code pour le rendre plus simple et afficher des sprites de 128 * 128 pixels à la place.

J’en profite pour simplifier un peu le code et j’obtiens le résultat suivant :

  • A 60 FPS, il est possible d’afficher 2000 sprites
  • A 30 FPS, il est possible d’en afficher 3600 !

Alors, là, on peut se poser la question légitime : Pourquoi on ne peut pas afficher 2 fois plus de sprites à 30 FPS qu’à 60 FPS ? Mystère...
Le plus étrange est à venir ! Que les sprites fassent 32 x 32 pixels, 128 x 128 pixels ou bien 512 x 512 pixels, la performance est quasiment la même ! Là aussi, mystère.

Dans tous les cas de figure, il semble que 2000 sprites soient largement suffisant pour notre projet (j'espère ne pas me tromper !)
En fait, que vous utilisiez Unity2D, Unreal Engine, Solar2D ou n’importe quel moteur de jeu, vous devriez arriverez à peu de choses près aux mêmes résultats (je suppose), car tous utilisent OpenGl pour le tracé de polygones ou de sprites. Le moteur ne fait plus grand-chose une fois le tracé lancé et surtout le langage utilisé n'a plus aucune importance.

Le choix d’un moteur ou d’un autre se fera donc en fonction du langage utilisé (en gardant à l'esprit que le moteur lui n'est pas développé dans ce langage) et des possibilités offertes par le moteur de rendu. Et là, à moins de les maitriser tous, le choix va être difficile à faire !

La journée s’achève

A la fin de la journée, et même si j’ai quelques interrogations sur la performance de Lua, C’est ok pour moi. On peut se lancer dans notre projet avec Solar2D !
De toute façon à ce stade de notre aventure, ce qu'on veut surtout c'est coder un jeu de plateforme. On est hyper enthousiastes, et peu importe l'outil, on a envie de se lancer !

Je vous donne ci-dessous un petit résumé des points forts et faibles de Solar2D.

Avantages

  • Moteur de rendu léger qui ne vous impose aucun outil.
  • Prise en main très simple.
  • Code concis !
  • Performance du tracé.
  • Facilité de production d’un exécutable pour Android ou iOS.
  • Petite communauté mais avec quelques membres actifs qui peuvent vous aider (dont moi 😊).
  • C’est totalement gratuit.
  • C'est Open source.

Inconvenants

  • Lua, c’est lent et la programmation objet ressemble à une rustine collée sur un langage procédural.
  • Peu d’utilisateurs en France.
  • Maintenu par quelques personnes seulement !

One more thing !

Solar2D peut aussi produire un code pour Windows ou pour votre navigateur, j’ai donc produit un snippet de mon petit benchmark (ok, c'est plutôt celui de Markus Ranner) que vous pourrez trouver et tester ici. Vous etes libre de le récuperer et d'en faire ce que bon vous semble.

Il est a noter que j’ai dû imposer 30 FPS pour la version web car il ne semble pas que les navigateurs soient capables d’afficher en 60 FPS.


Commentaires


Hillgreen Dream Team

Etienne: Développeur
Manu: Graphiste et développeur
Luis: 3D Graphes et animations
Reynald: Musiques et sons