Un jeu de casse-briques en Lua avec Love2d

Découverte du célèbre moteur par la pratique

a marqué ce sujet comme résolu.

Tout le monde se secoue ! :D

Cela plusieurs jours que j’ai envie de rédiger un tutoriel pour présenter et faire essayer Love2D, dans la même veine que celui-ci, du coup je ne peux plus résister, et malgré mes autres tutos en rédaction, je franchis le pas ^^

Pour ce tutoriel, je considérerai que le lecteur a des bases de programmation et connaît un minimum Lua). Le but est de faire découvrir Love2D tout en pratiquant.

J'ai commencé (il y a 29 minutes) la rédaction d'un tutoriel au doux nom de « Un jeu de casse-briques en Lua avec Love2d » et j'ai dans l'objectif de proposer en validation un texte aux petits oignons. Je fais donc appel à votre bonté sans limite pour dénicher le moindre pépin, que ce soit à propos du fond ou de la forme. Vous pourrez consulter la bêta à votre guise à l'adresse suivante :

Merci !

+3 -0

Bonjour,

Même si je ne connais pas Lua, je peux faire une relecture sur ton tuto1. Pour cela, je voudrai tout de même savoir s'il y a des parties encore en cours d'écriture et que je peux donc sauter.

J'essaie de faire ça ce weekend. ^^


  1. Parce que même si le raton laveur qui te sert d'avatar est très joli, une page pleine de raton laveur, ça fait beaucoup. :P  

+0 -0

Salut,

La première version du tutoriel est terminée (il n'y a donc plus de parties en cours d'écriture, j'ai relu et corrigé au maximum) et l'ensemble est consultable en bêta normalement.

Merci pour ton intérêt et pour le compliment au passage (j'étais dans un grand jour au moment de cette photo). Par contre où vois-tu une page pleine de raton laveurs : page de bêta ou simple psychose ? :D

+0 -0

Par contre où vois-tu une page pleine de raton laveurs : page de bêta ou simple psychose ? :D

Smokiev

Scroll sur cette page, tu comprendras. :)

tleb

Je suis peut-être aveugle, mais honnêtement j'ai fait 4-5 aller-retours sans voir le moindre raton laveur :o

C'est extrêmement étrange. Z'auriez un petit screenshot s'il vous plaît ?

+0 -0

Ratons laveurs

C'était juste une blague pour dire qu'à force que personne ne te réponde, ton avatar, que je crois être un raton laveur (me trompè-je ?), allais être présent sur tout les messages de la page, donc « sur toute la page ».

+0 -0

Aaaahhhhhhhhhhhhh, j'ai cru que tu parlais du tutoriel lui-même et non de cette page même. :D

Oui, j'étais assez passionné x) et vu que je modifiais légèrement les parties déjà écrites lorsque j'en ajoutais je préférais mettre à jour plutôt que d'avoir des retours sur une version précédente. Mais t'inquiète pas c'est censé être un des derniers ratons de la page, je vais être plus modéré. ^^

+0 -0

Salut,

À noter : mon niveau de lua est de 0. Je risque de faire certaines réflexions un peu à côté de la plaque. ^^

À noter 2 : je n'ai pas testé les codes.

Intro

Tu mets Love2D, mais sur le site, ils l’appellent Löve ou LÖVE.

C'est con à dire, mais rappelle ce qu'est le jeu du casse-briques. Les moins de 20 ans n'ont peut-être pas connu.

Première fenêtre

callback

Je comprends qu'on préfère l'anglais, mais écrit quand même ce que signifie callback en français la première fois.

deltatime

Pas de temps, ça ne convient pas comme traduction ?

De cette manière, il est possible de mettre à jour un jeu (la position d'un personnage par exemple) de manière uniforme (l'affichage sera le même sur un ordinateur lent que sur un rapide puisqu'il ne dépend pas de l'exécution d'une boucle).

Uniforme n'est peut-être pas le bon terme. « De cette manière, il est possible de mettre à jour un jeu (la position d'un personnage par exemple) indépendamment de la puissance de l'ordinateur (l'affichage ne dépend pas de l'exécution d'une boucle). », ou une variante plus juste, serait plus lisible.

Si vous cherchez à en savoir un peu plus sur ces fonctions et voir dans quel ordre elles s'organisent, je vous renvoie respectivement à ce lien et à celui-ci.

J'approuve le fait de renvoyer vers la doc très tôt.

Pour ma part, je n'ai pas l'icône d'affichée (sans doute parce que je suis sous Ubuntu).

C'est bête. :D

La raquette et les briques

Petit rappel …

Tu commences une info dans le bloc, puis tu donnes une image illustrative en dehors du bloc. Je mettrais tout en dehors du bloc.

Démarrons avec la raquette. Celle-ci sera placée vers le bas de la fenêtre. Création et initialisation

Déjà, nous voyons qu'il nous faut en conserver certaines caractéristiques, telle que sa position en abscisse, sa position en ordonnée ou encore sa vitesse.

Je trouve ce passage un peu brut. Peut-être dire ce qu'on attend de la raquette d'abord, puis en déduire ce qu'on doit garder en mémoire.

Là, si vous avez bien suivi, vous penserez sans doute que nous allons utiliser la fonction love.keypressed. Eh bien, que nenni !

Pourquoi avoir présenté cette fonction, alors ? On ne l'utilise pas, elle sert juste à nous induire en erreur ?

Les briques

J'ai un peu de mal à comprendre pourquoi tu fais comme ça, mais c'est typiquement le genre de chose qui peu être dû à ma méconnaissance de lua.

Les vies et la balle

(Beaucoup de lua ici, j'accélère un peu)

Pour tester la collision entre deux rectangles, nous utiliserons la fonction suivante tirée du web :

Mouais… Ça n'a rien de sorcier, je pense que tu pourrais expliquer le très peu de maths qu'il y a ici. Ça me semble une mauvaise idée d'encourager à récupérer du code sans le comprendre un minimum.

Conclusion

Les images du jeu, réalisées avec Paint, ainsi que les sons, générés avec Bfxr, sont libres de droit.

Libre de droit ne signifie pas grand chose en droit. Ce serait surement plus simple de les placer sous licence CC0, par exemple (domaine public vivant).


Sur la forme, remarques sur des trucs récurrents :

  • met des guillemets français « et » ;
  • les titres des sous-parties devraient être de niveau 1 (#), puis de niveau 2 (##) ; j'ai l'impression que tu mets niveau 2 (##) et 3 (###) ;
  • tu fais parfois des liens vers la doc pour les fonctions comme love.keypressed, le faire systématiquement serait mieux ;
  • tu utilises le bloc touche ||touche|| plutôt que code `code` pour les codes dans le texte ;
  • les légendes des images devraient finir par un point ;
  • les éléments d'une liste commencent par une minuscule et se terminent par un point-virgule quand ce sont des énumérations, sauf le dernier, par un point.

De manière générale, j’appuierai plus le côté générique de ce qui est fait. Ce n'est pas un truc-et-astuce, c'est l'apprentissage d'une bibliothèque par un travail pratique (c'est beaucoup mieux). C'est à mettre en valeur.

Si mon retour a le mérite d'exister, je ne suis probablement pas le public cible de ce tuto (j'ai regardé les codes trèèès rapidement), ce serait bien de trouver d'autre gens motivés. ^^ Mais c'est un bon tuto.

+2 -0

Salut,

Tout d'abord merci pour ton joli retour ! :)

À noter 2 : je n'ai pas testé les codes.

T'inquiète pas, j'ai retesté deux fois de zéro pour m'assurer que c'était bon.

Intro

Tu mets Love2D, mais sur le site, ils l’appellent Löve ou LÖVE.

C'est vrai, mais quand tu regardes l'url c'est love2d et puis on trouve pas mal le terme Love2D sur internet. Je pense que les deux passent mais je modifierai si besoin.

C'est con à dire, mais rappelle ce qu'est le jeu du casse-briques. Les moins de 20 ans n'ont peut-être pas connu.

Pas faux.

Première fenêtre

Je comprends qu'on préfère l'anglais, mais écrit quand même ce que signifie callback en français la première fois.

Ça sera fait ^^

Pas de temps, ça ne convient pas comme traduction ?

Plutôt écart de temps ou temps écoulé, non ? En tout, cas j'explicite ce terme juste après donc je ne sais pas si une traduction est nécessaire.

Uniforme n'est peut-être pas le bon terme. « De cette manière, il est possible de mettre à jour un jeu (la position d'un personnage par exemple) indépendamment de la puissance de l'ordinateur (l'affichage ne dépend pas de l'exécution d'une boucle). », ou une variante plus juste, serait plus lisible.

C'est plus clair ainsi en effet. Peut-être modifier aussi la dernière parenthèse ?

J'approuve le fait de renvoyer vers la doc très tôt.

Tant mieux, j'ai essayé de renvoyer pour chaque morceau utlisé (callback, affichage, son, …) vers celle-ci.

C'est bête. :D

Un peu oui, mais je fais confiance à Love2D :P

La raquette et les briques

Tu commences une info dans le bloc, puis tu donnes une image illustrative en dehors du bloc. Je mettrais tout en dehors du bloc.

En effet.

Je trouve ce passage un peu brut. Peut-être dire ce qu'on attend de la raquette d'abord, puis en déduire ce qu'on doit garder en mémoire.

Ok, je vais voir pour étoffer le premier paragraphe "Celle-ci sera placée vers le bas de la fenêtre" de la sorte que l'on arrivera plus facilement au second (déduction on a besoin de garder ça, etc.).

Pourquoi avoir présenté cette fonction, alors ? On ne l'utilise pas, elle sert juste à nous induire en erreur ?

Je l'ai présenté, car je la juge importante pour le squelette de base et on s'en servira par la suite (pour lancer une partie et quitter). Par ailleurs, je pense que comme ça le lecteur retiendra quand s'en servir s'il veut faire un jeu en avec Love2D.

J'ai un peu de mal à comprendre pourquoi tu fais comme ça, mais c'est typiquement le genre de chose qui peu être dû à ma méconnaissance de lua.

Je trouve plus clair et plus simple de modéliser chaque brique par une entité si c'est ça ta question. Au final, l'ensemble des briques n'est rien d'autre qu'un tableau à deux dimensions. Sinon le fonctionnement est le même que pour les autres éléments, on crée, on affiche et on déplace si besoin.

Après, pour les boucles for, il existe des moyens de parcourir des tableaux (ipairs et pairs), mais je trouve plus clair là encore de m'en passer ici. En tout cas, je vais remplacer les compteurs de ces boucles par les conventionnels i, j, etc.

N'hésite pas à expliciter un peu plus ta remarque. :)

Les vies et la balle

Mouais… Ça n'a rien de sorcier, je pense que tu pourrais expliquer le très peu de maths qu'il y a ici. Ça me semble une mauvaise idée d'encourager à récupérer du code sans le comprendre un minimum.

D'accord.

Conclusion

Libre de droit ne signifie pas grand chose en droit. Ce serait surement plus simple de les placer sous licence CC0, par exemple (domaine public vivant).

J'ai écrit ça pour d'autres contenus et c'est passé, et puis on trouve les deux sur internet. Au final, Libre de droit et CC0 c'est très très similaire. C'est plus une question de notation ici. Peut-être qu'employer le terme CC0 est plus rigoureux.

Remarques générales

met des guillemets français « et » ;

Ok.

Les titres des sous-parties devraient être de niveau 1 (#), puis de niveau 2 (##) ; j'ai l'impression que tu mets niveau 2 (##) et 3 (###)

Oui, je fais ça parce que je trouve ça plus joli x) (les titres de chapitre, partie, section étant déjà oranges et assez gros).

tu fais parfois des liens vers la doc pour les fonctions comme love.keypressed, le faire systématiquement serait mieux ;

Comme dit précédemment, j'ai essayé de le faire pour chaque bloc (callback, affichage, son), une fois. Après, le faire pour chaque fonction me semble un peu excessif, non ?

tu utilises le bloc touche touche plutôt que code code pour les codes dans le texte

Oui, j'avais aussi fait ça pour tutoriel sur turtle. C'est vrai que ce n'est pas son rôle, mais est-ce vraiment gênant ?

les légendes des images devraient finir par un point ;

D'accord.

les éléments d'une liste commencent par une minuscule et se terminent par un point-virgule quand ce sont des énumérations, sauf le dernier, par un point.

C'est noté.


De manière générale, j’appuierai plus le côté générique de ce qui est fait. Ce n'est pas un truc-et-astuce, c'est l'apprentissage d'une bibliothèque par un travail pratique (c'est beaucoup mieux). C'est à mettre en valeur.

Justement, j'ai essayé d'expliquer ce qu'on allait faire et ce dont on allait avoir besoin pour cela. Donc, je n'explique pas forcément tout le code Lua (mais c'est bien commenté), mais par contre je dis quelle est l'utilisation de la bibliothèque pour le cas pratique. Donc qu'attendrais tu précisément comme explications ?

En tout, cas, merci encore pour ton retour ! ;)

N'hésite pas à expliciter un peu plus ta remarque. :)

Problème d'habitude, on fait pas comme ça en pas lua. Je pense qu'il n'y aura pas de problème avec le public normal de ce tuto.

J'ai écrit ça pour d'autres contenus et c'est passé, et puis on trouve les deux sur internet. Au final, Libre de droit et CC0 c'est très très similaire. C'est plus une question de notation ici. Peut-être qu'employer le terme CC0 est plus rigoureux.

En fait, légalement, tu n'a pas le droit de donner certains droits (les droits patrimoniaux sont incessibles et inaltérables, par exemple). Libre de droit, c'est trop vague pour être légal en droit français. La CC0 est une version juridiquement fiable (plus fiable, en tout cas) du libre de droit (je cède tout les droits que j'ai le droit de céder sous conditions […] de tel sorte que […]).

Oui, j'avais aussi fait ça pour tutoriel sur turtle. C'est vrai que ce n'est pas son rôle, mais est-ce vraiment gênant ?

Il y a un passage où tu parles de la touche Échap, et d'une fonction Löve. Les deux sont mis en valeur pareil, alors qu'il s'agit de deux objets différents, c'est un peu bête. À voir avec un validateur.

Justement, j'ai essayé d'expliquer ce qu'on allait faire et ce dont on allait avoir besoin pour cela.

Oui, on est d'accord. Je dis que c'est bien un truc à mettre en valeur autant que possible. C'est ce qui fait l'intérêt du tuto. Comment le mettre encore plus en valeur ? Aucune idée, je ne fais pas lua. :-° J'ai vraiment fais un retour car je trouve un peu triste que des tutos passent en bêta sans être relu (si bien que seules deux personnes font la relecture, l'auteur et le validateur, c'est peu), et que je pouvais faire une relecture au moins partielle.

+0 -0

En fait, légalement, tu n'a pas le droit de donner certains droits (les droits patrimoniaux sont incessibles et inaltérables, par exemple). Libre de droit, c'est trop vague pour être légal en droit français. La CC0 est une version juridiquement fiable (plus fiable, en tout cas) du libre de droit (je cède tout les droits que j'ai le droit de céder sous conditions […] de tel sorte que […]).

D'accord.

J'ai vraiment fais un retour car je trouve un peu triste que des tutos passent en bêta sans être relu (si bien que seules deux personnes font la relecture, l'auteur et le validateur, c'est peu), et que je pouvais faire une relecture au moins partielle.

Et c'est vraiment sympathique de ta part :)

Ce sujet est verrouillé.