Développement de jeux avec Lua et LÖVE : Créez un RPG à partir de zéro ! | Kyle Schaub | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Développement de jeux avec Lua et LÖVE : Créez un RPG à partir de zéro !

teacher avatar Kyle Schaub, Software Engineer

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      1:23

    • 2.

      Installation et configuration

      6:43

    • 3.

      Mouvement des joueurs

      8:47

    • 4.

      Sprites et arrière-plans

      4:23

    • 5.

      Animations

      14:08

    • 6.

      Conception de niveau et carrelage

      7:32

    • 7.

      Appareil photo

      9:49

    • 8.

      Physique

      9:44

    • 9.

      Collisions

      13:36

    • 10.

      Conclusion

      2:41

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

384

apprenants

1

projets

À propos de ce cours

Pour les programmeurs débutants et expérimentés, l'un des meilleurs outils pour apprendre le développement de jeux avec est LÖVE (également connu sous le nom de Love2D), un moteur de jeux open-source qui permet aux utilisateurs d'écrire la logique de leurs jeux à Lua, un langage de script facile à récupérer. Ces joyaux cachés de l'industrie du développement sont parfaits pour apprendre les concepts de base et les appliquer pour créer des applications à grande échelle. En outre, l'ensemble du logiciel est libre et gratuit !

Ce cours passe par le processus de mise en place de votre environnement de développement, de téléchargement de tout le logiciel nécessaire et de sauter directement dans la création d'un jeu ! Nous allons créer les bases d'un jeu de style RPG, avec un personnage principal qui peut se déplacer avec les touches fléchées, avec des animations pour chaque direction et une caméra qui suit le joueur où qu'il se déplace. En outre, nous discuterons de la façon d'utiliser Tiled, un éditeur de niveaux fantastique qui vous permet de concevoir facilement des cartes et des niveaux qui peuvent être importés dans votre projet.Bien

que vous puissiez suivre avec les vidéos sans avoir de codage d'expérience antérieure, je vous recommande de faire une certaine connaissance avec Lua, juste pour que vous ayez un peu de contexte supplémentaire sur le fonctionnement de tout fonction. Si vous êtes intéressé, j'ai également un cours de programmation Lua sur Skillshare, ce qui ne nécessite aucune expérience préalable du tout.

Rencontrez votre enseignant·e

Teacher Profile Image

Kyle Schaub

Software Engineer

Enseignant·e
Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Bienvenue dans le développement du jeu avec la classe Lua and Love. Tout au long de ces cours, nous discuterons du processus de création de jeux à partir de zéro, en utilisant l'amour, communément appelé Love 2D. Et nous allons faire tout notre codage à Lua. La classe est basée sur des projets. Le but est de créer ce jeu ici, qui pourrait servir de base à n'importe quel jeu de style RPG. Ce type de jeu est une introduction parfaite car il implique le mouvement du joueur, la lecture de l'entrée du clavier, l'ajout de sprites, d' animations, de collisions avec la physique et de la conception de niveaux à l'aide de mosaïques. Tout en travaillant sur ce projet, nous parlerons de tous les fondamentaux fondamentaux de l'utilisation de l'amour afin que vous soyez capable de créer des jeux uniques ou de construire sur celui-ci. Vous n'avez pas besoin de vous familiariser avec le développement de jeux ou d'aimer pour suivre ce cours. Nous expliquerons comment tout installer et configurer sur votre ordinateur, puis nous allons partir de là. Je vous recommande cependant d'avoir une certaine expérience dans le codage. Si vous avez déjà utilisé d'autres langages de programmation dehors de Lua, vous pourrez probablement reprendre la langue assez rapidement. Cependant, si vous êtes tout nouveau dans le codage ou si vous souhaitez simplement avoir une idée de Lua. J'ai un autre cours de Skillshare appelé introduction à la programmation Lua, qui ne suppose aucune connaissance préalable et vous préparera complètement à ce cours d'amour 2D. Dès que vous serez prêt, nous commencerons les choses en installant l' amour et en configurant les choses pour coder nos jeux. Passez à la leçon suivante. 2. Installation et configuration: Bonjour les amis. Dans cette vidéo, je vais passer en revue les étapes d'installation du framework de jeu. J'adore, sur votre ordinateur et montrez également comment configurer de nouveaux projets et comment les exécuter. Installer l'amour est très facile. Tu vas juste aimer sur d.org. Et les liens de téléchargement sont juste ici au milieu. Si vous êtes sur Mac, il suffit de télécharger ce fichier et d'installer l'application. Et si vous êtes sous Windows, je recommande le programme d'installation. Pendant que vous parcourez la configuration de Windows, assurez-vous de suivre ce chemin ici, le dossier de destination. Nous allons utiliser cela dans une seconde. Une fois l'installation terminée, je vous recommande de créer un raccourci à aimer sur votre bureau. Si vous êtes sur Mac, vous pouvez simplement ajouter l'application love à votre document sous Windows. Nous allons visiter ce chemin d'installation d' il y a tout juste un instant. Dans mon cas, c'est ici dans C Program Files, mon amour. Et si nous regardons de plus près, et nous trouverons ce fichier EXE love dot , directement dans ce dossier. Si vous ne voyez pas la partie EXE point, vous pouvez accéder à View, puis choisir ces extensions de nom de fichier. Et cela montrera l'extension de chaque fichier. Nous voulons donc créer un raccourci vers ce Love Dot EXE. Je vais donc passer à Envoyer au bureau. Ensuite, nous verrons qu'il y a un raccourci ici. Je vais aller de l'avant et renommer ça en amour. Une fois que cela est prêt, vous pouvez continuer et double-cliquer dessus pour commencer. Ou si vous êtes sur Mac, exécutez simplement l'application et vous devriez voir une fenêtre ressemblant à celle-ci, juste une animation bizarre. Cela peut sembler légèrement différent selon la version de l'amour que vous utilisez. Mais c'est l'écran qui montre quand l'amour est en cours d'exécution, mais aucun jeu n'est trouvé. Et si vous voyez quelque chose comme ça, cela signifie que tout va bien jusqu'ici. L'étape suivante consiste à installer un éditeur de texte que vous utiliserez pour coder. Vous pouvez utiliser tout ce qui vous convient. Mais je recommande vivement Visual Studio Code , c'est pourquoi j'utilise ces vidéos. Et c'est totalement gratuit. Vous pouvez l'obtenir à partir de code dot Visual Studio.com. Et les liens de téléchargement se trouvent ici. Il suffit de télécharger le bon pour votre système d'exploitation. Une fois que vous avez téléchargé et installé le code Visual Studio, lancez-le. Dans ce programme, nous pourrons éditer et créer des fichiers pour notre jeu. Pour ce faire, nous devrons créer un nouveau projet d'amour. Les projets et aimés de D ont une structure très simple à réaliser. Vous allez simplement créer un nouveau dossier n'importe où sur votre ordinateur. Et mon cas, je vais simplement créer mon ordinateur sur le bureau, donc je bouton droit de la souris et je choisis New Folder. Et je vais appeler ce dossier mon jeu. Maintenant, je n'ai qu'un dossier appelé mon jeu sur le bureau, ou ce dossier peut être n'importe où sur votre ordinateur. Ensuite, dans Visual Studio, le code voudra ouvrir ce dossier. Et nous pouvons le faire avec File. Ensuite, ouvrez le dossier. Et j'ai créé mon dossier sur mon bureau et ici Je vais donc sélectionner ce dossier et choisir Sélectionner un dossier. Maintenant, notre dossier est ouvert. On peut voir le nom de mon jeu dans cette section et dans le coin supérieur gauche juste ici. Maintenant que nous sommes là, la prochaine étape consiste à créer notre premier fichier Lua. Et nous pouvons le faire en utilisant ce nouveau bouton de fichier. Vous devrez peut-être survoler cette section pour la voir, mais cliquez sur Nouveau fichier et nous devons nommer ce fichier principal point Lua. Il doit porter ce nom exact. Et une fois que vous appuyez sur Entrée, le fichier sera créé et il devrait ouvrir ce nouvel onglet ici. Il est dit principal Dot Lu up. C'est juste un fichier vide pour le moment. Et c'est ça. C'est la structure simple que tous ceux qui aiment les projets de bricolage commencent par simplement un dossier qui contient un fichier appelé main que Lua. Bien sûr, vous allez en ajouter d'autres à ce dossier, mais le simple fait de le faire seul nous permet d'exécuter le projet par amour. Il existe plusieurs façons d'exécuter un projet. Ici, j'ai mon dossier de projet, juste mon jeu. Et comme nous venons de le voir, il contient juste ce fichier main.py et que nous venons de créer. Et une façon d'exécuter ce code consiste à prendre le dossier du projet et à le faire glisser sur un raccourci d'amour. Et s'il réussit, il devrait apparaître. Une fenêtre d'amour peut dire sans titre, et c'est juste un grand écran noir. Si vous voyez cela, cela signifie que cela a fonctionné. Comme notre fichier main.py est vide, on s'attend à ce que le jeu soit vide. Une fois que nous aurons ajouté du code à ce fichier, la fenêtre commencera à afficher ce que nous choisissons pour être notre jeu. En guise de note, vous pouvez faire glisser et déposer des dossiers depuis n'importe où sur votre ordinateur. Il n'est pas nécessaire qu'il provienne spécifiquement du bureau. Maintenant, bien que le glisser-déposer soit facile, nous pouvons le rendre encore plus facile en exécutant notre projet via Visual Studio Code. Pour ce faire, il suffit d'installer une extension. Et l'extension n'est qu'un plug-in qui fait que le code VS fait quelque chose de spécifique. Par conséquent, dans cet onglet Extensions ici, nous allons rechercher les éléments essentiels que nous voulons, ce qu'on appelle le support 2D adoré. Donc, lorsque vous recherchez cela, vous devriez trouver cet amour pour faire le plugin Support. Vous pouvez donc l'installer. Et une fois que vous voyez les boutons Désactiver et désinstaller, vous savez que l'extension a été installée correctement. Mais à partir de là, nous devons le configurer un peu. Par conséquent, en utilisant cette icône d'engrenage, nous pouvons passer aux paramètres d'extension. Et puis ici, nous devons vérifier que ce chemin, le chemin 2D de l'amour, est exact. Plus tôt, lorsque vous installez love to D, nous sommes allés sur le chemin où il a été installé afin de créer le raccourci. C'est la même voie que nous devons inclure ici. Si vous êtes sous Windows, le chemin qui est affiché ici, qui est C Program Files, love, love, dot EXE. Ce chemin est probablement correct. Et si vous êtes sur Mac, si vous avez installé l'application Love sur vos applications, le chemin sera probablement celui qui se trouve à l'écran. Mais assurez-vous toujours de vérifier l'endroit où vous avez réellement installé et de placer le même chemin ici. Et une fois que vous avez spécifié ce chemin, nous pouvons aller de l'avant et fermer ces onglets et le tester. Et vous pouvez simplement revenir à onglet inférieur de votre point principal en haut, ou passer à la partie Explorateur de fichiers et double-cliquer sur main.py. Une fois que nous sommes ici, nous pouvons exécuter le projet à l'aide d'une commande. Sous Windows, la commande est Alt L, et si vous êtes sur Mac, la commande est Commande L. Donc, en utilisant cette commande, je vais lancer Alt L. et ça démarre notre jeu. Il a fallu n'importe quel code dans ce dossier de jeu et l'utilise par amour. La même chose est si nous avons glissé et déposé le dossier. Cependant, c'est beaucoup plus rapide et plus facile. Assurez-vous donc de garder cette commande dans le fond de votre esprit chaque fois que vous voulez exécuter votre projet. À ce stade, vous êtes tous prêts à commencer à coder votre jeu. Vous allez commencer par insérer du code dans ce fichier main.py. Au fur et à mesure que vous développez, vous pouvez ajouter d'autres fichiers à votre dossier de projet. 3. Mouvement des joueurs: Bonjour les amis. Dans cette vidéo, je vais voir comment créer un simple personnage de joueur amoureux de d, où vous pouvez les déplacer sur l'écran avec les touches fléchées. Une fois que vous êtes prêt, j'ai un tout nouveau projet prêt à être lancé. C'est juste un dossier appelé mon jeu et à l'intérieur de celui-ci sous la forme d'un fichier appelé main.py. C'est le fondement de tout projet amoureux. Et nous pouvons aller de l'avant et exécuter ce fichier tel quel. Et nous verrons un écran noir attendu puisque notre fichier main.py n'a pas encore de code dedans. Le gain qui en résulte ne fonctionne que comme une fenêtre noire. La première chose que nous devrions faire avec n'importe quel jeu est de mettre dans les trois fonctions principales que nous utilisons pour tous les projets amoureux, c' est-à-dire la fonction aimée dot load. Ensuite, la fonction a adoré la mise à jour des points avec DT entre parenthèses. Et puis la fonction aimait dessiner des points. Et à l'aide de ces trois fonctions, nous allons créer notre objet joueur et y ajouter des commandes pour qu'il puisse se déplacer. Une petite note avant de commencer, la fonction de chargement se produit dès le début du jeu. La fonction de mise à jour se produit à chaque image. Il servira donc de boucle de jeu. Et la fonction de dessin est ce qui affiche nos graphiques à l'écran. Ne vous inquiétez pas si vous n'êtes pas parfaitement clair sur tout cela. Une fois que nous aurons du code en place, cela aura beaucoup plus de sens. Pour commencer, créons notre table de joueurs, qui se déroulera dans l'amour dot load. Nous allons faire des égaux de joueur, ouvrir et fermer des accolades bouclées. Gardez maintenant à l'esprit que chez Lua, accolades ont tendance à faire référence à des tables. Donc, puisque nous faisons une accolade ouverte et fermée ici, cela signifie que le joueur est prêt à être une table vide. Ensuite, nous lui donnerons quelques propriétés. Disons donc que le point x du joueur est égal 0 et que le point y du joueur est égal à 0. Ils agiront comme valeurs de position. Le monde du jeu est comme une grande grille où l'axe des X va à gauche et à droite, et l'axe Y monte et descend. Notre joueur va commencer à la position 0, 0 ou à l'origine de l'écran. Ensuite, utilisons l'objet joueur pour dessiner quelque chose dans la fenêtre de jeu. Tous les dessins se déroulent dans la fonction Love Dot Draw. Donc, ici, allons de l'avant et dessinons un cercle qui jouera le rôle de joueur pour l'instant. Nous dirons que les graphismes adorent le cercle de points. Et ensuite, entre parenthèses, nous avons quatre paramètres différents que nous devons fournir. Tout d'abord, c'est le mode. Nous avons deux options. Nous avons Phil ou ligne, alors remplissez, donc notre cercle sera rempli. Ensuite, nous avons besoin de l'exposition, qui sera joueuse dx. Ensuite, nous avons besoin de la position y, du point y du joueur, puis du rayon du cercle. Vous pouvez faire ça comme vous voulez. Je vais faire le mien 100. Pour résumer, cette ligne ici va dessiner un cercle à la position 0, 0. Le rayon du cercle va être 100 et il va être rempli. Maintenant, si nous sauvegardons notre fichier puis que nous exécutons, nous verrons que nous avons un cercle de coupure dans le coin supérieur gauche. Maintenant, la raison pour laquelle il est coupé parce que le cercle est à la position 0, 0 et 000 est le coin supérieur gauche de notre fenêtre de jeu ici. Changeons la position de notre joueur en position, disons 400, 200. Donc maintenant, notre position x est 400 et notre position y est 200. Si nous sauvegardons et courons maintenant, notre cercle est complètement dans la fenêtre du jeu et maintenant nous pouvons le voir complètement. Plus précisément, le cercle s'est déplacé vers la droite, 400 pixels jusqu'à ce point juste ici, puis jusqu'à 100 pixels pour que le centre du cercle soit à quatre cents, deux cents. Et gardez à l'esprit que plus votre valeur Y est élevée, plus vous allez vers le bas de l'écran. Donc, puisque nous avons dit 200 ici, cela signifie que nous descendons à 100 pixels. Maintenant que nous avons un objet joueur affiché à l'écran, nous pouvons maintenant travailler à le faire bouger. Cette logique va avoir lieu dans la fonction de mise à jour love dot car lambda update exécute chaque image. Donc, pour commencer, faisons quelque chose de simple. Nous allons faire un point de joueur x égal au point du joueur x plus un. En d'autres termes, chaque point x de lecteur de cadres va augmenter d'un. Si nous sauvegardons et courons, nous verrons que notre cercle se déplace lentement vers la droite. Plus précisément, c'est déplacer un pixel à chaque image. J'aime appeler cela l'illusion du mouvement. Chaque image est un peu mise à jour, ce qui donne l'impression qu'elle est en mouvement. De même, si nous devions changer celle-ci par trois, cela signifie maintenant que nous changeons l'exposition de trois par image. Et si nous sauvegardons et exécutons, il se déplace toujours vers la droite, mais il se déplace plus vite maintenant, plus précisément, il se déplace trois pixels par image, donc c'est trois fois plus rapide. Maintenant, notre tâche est de faire ce même type de mouvement, mais de le faire correspondre aux touches fléchées sur lesquelles le joueur appuie. Vous pouvez lire très facilement l'entrée du clavier, et nous pouvons le faire en utilisant une instruction if. Nous dirons que si vous aimiez la planche Schottky, le point est bas. Ensuite, entre parenthèses, nous devons spécifier la clé que nous recherchons est en panne. Et nous commencerons par la flèche droite, ou en d'autres termes, la flèche droite. Ensuite. Et nous allons mettre fin à cette ligne à la fin de l'instruction if. Nous demandons donc si la flèche droite appuie vers le bas. Si c'est le cas, nous allons déplacer le lecteur vers la droite de trois pixels. Et cela arrive à chaque image. Il est donc constamment en train de vérifier cela. Si nous sauvegardons et courons maintenant, le joueur ne bouge pas, mais dès que j'appuie sur la flèche droite, il se déplace. Et ça ne va le faire que lorsque j' aurai cette touche fléchée enfoncée. Faisons maintenant la même chose, mais dans une direction différente. Nous garderons les choses faciles et commencerons par la direction gauche. Cette fois-ci, au lieu d'augmenter de trois, chaque fois, nous diminuerons de trois. Parce que plus la valeur x est petite du joueur, plus ce sera à gauche de l'écran si nous sauvegardons et courons maintenant, si je tiens à droite, il se déplace à droite. Mais si je tiens à gauche, joueur se déplace maintenant vers la gauche. Nous avons donc maintenant les deux directions horizontales qui fonctionnent. Ensuite, faisons en sorte que le joueur puisse descendre. Si nous copions à nouveau cette section et que nous la collons ici, vérifions que c'est en bas de la flèche vers le bas. Cette fois-ci, nous ne voulons pas mettre à jour l' exposition des joueurs car nous voulons nous déplacer verticalement. Se déplacer verticalement signifie que nous devons mettre à jour la position des joueurs. Le joueur dot y est donc égal point y du joueur et nous voulons descendre. Cela signifie que nous allons en ajouter trois. Si nous sauvegardons et courons, si je maintiens enfoncé, le joueur se déplace vers le bas. Et enfin, nous avons encore une direction à faire. Si nous copions cela, nous voulons vérifier. Et si nous voulons progresser, nous diminuons simplement de trois. Et avec cela, nous devrions avoir les quatre directions à gauche, à droite, en bas et en haut. Et en fait, c'est bien plus que les quatre directions. Si je maintiens les touches fléchées tout de suite, on se déplace en diagonale. Et c'est parce que les propriétés x et y peuvent être mises à jour en même temps, ce qui entraîne un mouvement diagonal. Avant de terminer la vidéo, quelque chose que nous pouvons nettoyer, c'est que nous avons plus 3 écrits sur quatre lignes différentes. C'est généralement une mauvaise pratique car si je voulais changer la vitesse des joueurs ou la vitesse à laquelle il se déplace, je devrais changer ces trois lignes sur ces quatre lignes et cela devient un peu ennuyeux. Il serait plus logique si nous créions une nouvelle propriété pour le joueur, disons la vitesse du point du joueur, et nous la définirons à trois. Maintenant, je peux prendre cela et au lieu d'en écrire trois dans tous ces endroits, je peux faire de la vitesse du point du joueur. Et maintenant, chaque fois que je veux mettre à jour la vitesse du joueur, je n'ai qu'à mettre à jour cette valeur ici. Disons que je voulais l'augmenter à cinq. Maintenant, mon joueur se déplace à cinq pixels par image. Donc, si j'économise et que je cours, maintenant, nous allons plus vite et c'est beaucoup plus facile à gérer. Et une dernière chose que je veux mentionner, c'est l'heure d t ou delta. Vous pouvez utiliser cette valeur pour faire fonctionner votre jeu et ressentir la même chose, quelle que soit la fréquence d'images. Je voulais juste donner un coup d'oeil à ce sujet. Ce n'est pas du tout urgent lorsque vous commencez. Je vais m'appuyer là-dessus un peu plus. Dans la vidéo suivante, je vais montrer comment dessiner de vrais sprites dans le jeu, plutôt qu'un cercle simple comme celui-ci. 4. Sprites et arrière-plans: Bonjour les amis. Dans cette vidéo, je vais montrer comment ajouter vos sprites ou vos vraies œuvres d'art, ainsi que des arrière-plans à votre jeu amoureux. Pour le montrer, je vais m'appuyer sur le code de la vidéo de mouvement du lecteur. Fondamentalement, nous avons cette table de joueurs. Et en utilisant ses propriétés, nous descendons à la fonction de tirage et dessinons un cercle à la position du joueur. Et puis dans notre fonction de mise à jour, nous avons ces instructions if qui contrôlent le joueur avec les touches fléchées. Et en fin de compte, nous avons un cercle que nous pouvons contrôler et bouger lorsque nous appuyons sur les touches fléchées. Désormais, un cercle plane sur fond noir n'est pas trop intéressant. Nous allons donc utiliser des ressources artistiques ou des sprites réels . À la place. Vous pouvez utiliser n'importe quelle image de votre choix. Vous pouvez dessiner quelque chose vous-même, ou j'utiliserai cette simple image parent ainsi que ce point d'arrière-plan herbeux PNG. Si vous souhaitez utiliser les mêmes images que moi, vous pouvez accéder à l'onglet Projets et ressources en dessous de cette vidéo et trouver les ressources à droite. Vous pouvez télécharger parrot dot PNG et l'arrière-plan PNG à partir de là. Les autres ressources seront utilisées dans les leçons ultérieures. Lorsque vous avez le fichier est prêt. Nous voudrons réellement les déplacer vers notre dossier de projet. Alors allez-y et copiez ces fichiers. Ensuite, dans votre dossier de projet actuel l'année prochaine, main.py, nous allons créer un nouveau dossier. Je vais appeler ça des sprites. Et dans ce dossier, nous allons coller ces deux images, une pour l'arrière-plan et l'autre pour le lecteur. Et une fois que vous avez terminé cette opération, vous remarquerez que dans Visual Studio Code, nous avons désormais un dossier sprites. Et à l'intérieur, nous avons l'arrière-plan PNG et point parent PNG ou n'importe quel nom que vous leur avez donné. La prochaine étape consiste à inclure ces images dans notre code. Et nous commencerons par le sprite du joueur. Nous rendrons cela facile et organisé en plaçant n'importe quelle propriété pour la table des joueurs. Nous dirons que le joueur Dot sprite est égal l'amour dot Graphics, une nouvelle image dot-dot. Et puis le périmètre ici est le chemin vers lequel nous avons stocké ce fichier et que nous avons stocké dans le dossier sprites slash parrot dot PNG. Et c'est notre sprite Player. Et maintenant que cette image est chargée dans le sprite de points du joueur, nous pouvons l'utiliser dans la fonction de dessin. Donc, au lieu de dessiner un cercle, nous allons nous en débarrasser. Et au lieu de cela, nous dirons l'amour point Graphics dot Draw. Et le premier paramètre est ce que nous voulons laisser tomber, c' est-à-dire le sprite à points du joueur. Ensuite, c'est la position point x et le point y. Et avec cela en place, si nous le sauvegardons et l' exécutons, nous verrons que notre joueur est maintenant représenté par notre sprite. Dans mon cas, c'est le perroquet. Ensuite, nous allons faire dessiner le fond dans la même affaire. Nous devons charger cette image dans une variable. Nous allons donc mettre en arrière-plan les mêmes que les graphismes, cette nouvelle image. Et le chemin est le fond slash sprites, PNG. Maintenant que nous l'avons stocké en arrière-plan, nous pouvons l'utiliser à nouveau dans la fonction de dessin. Je vais mettre en amour des points graphiques, dessiner des points. Nous sommes allés dessiner l'arrière-plan et nous allons le dessiner à la position 0. 0. Maintenant, la position que nous fournissons pour l'un de ces appels de fonction de dessin représente en fait le coin supérieur gauche de l'image que nous dessinons. Ainsi, comme notre arrière-plan est un grand carré ou un rectangle, en mettant sa position juste à 000, nous l'alignerons parfaitement avec notre fenêtre de jeu, puisque 00 est également le coin supérieur gauche de la fenêtre. Si nous sauvegardons et courons, nous verrons que notre fond d'herbe est maintenant en place. Mais vous remarquerez que les joueurs ont soudainement disparu. Voici le problème. Le joueur est toujours là et est toujours en train d'être dessiné, mais l'arrière-plan est dessiné au-dessus de celui-ci. Il n'est donc plus visible pour nous. Pour dessiner des sprites, l'ordre dans lequel vous les dessinez est important. Donc, dans notre cas, nous avons dessiné le sprite du joueur, mais ensuite nous faisons l'arrière-plan après, ce qui fait que l'arrière-plan est placé sur le dessus. Si vous voulez résoudre ce problème, il suffit de changer cet ordre. Si nous dessinons l'arrière-plan en premier, cela signifie que l'arrière-plan sera dessiné et que le sprite du joueur sera dessiné au-dessus de celui-ci. En fin de compte, lorsque nous sauverons et courrons maintenant, nous verrons notre sprite Player dessiné au-dessus de notre arrière-plan herbeux. Et cela couvre les bases du dessin de sprites. À partir de là, j'aimerais transformer ce spray pour oiseaux un humain avec des animations de marche, ce qui est assez facile lorsque nous utilisons des logiciels open source. Nous en parlerons dans la prochaine vidéo. 5. Animations: Bonjour les amis. Dans cette vidéo, je vais montrer comment ajouter des animations au personnage de votre joueur, où il est confronté et marche dans la direction que vous vous déplacez. J'utiliserai ces sprites qui ont été créés et fournis par la largeur de l'amour lors de l'ouverture du jeu art.org. Vous pouvez télécharger cette feuille de lecteur de fichiers PNG à partir de l'onglet Projets et ressources ci-dessous. Ou vous êtes libre d'utiliser n'importe quelle autre feuille de sprite que vous souhaitez utiliser. En regardant rapidement cette image, vous verrez qu'il y a quatre lignes représentant chacune une direction différente. Notre objectif est d'utiliser chaque image individuelle d' une ligne particulière afin de créer l'animation. Lorsque chaque image a été jouée en succession rapide, cela donne l'illusion que le joueur marche. Une fois que votre projet est prêt, allez de l'avant et créez un dossier sprites à côté de votre fichier main.py si vous n'en avez pas déjà un. Et à l'intérieur, allez-y et collez dans cette feuille de lecteur point PNG. Une fois que cela est fait dans Visual Studio Code, vous devriez voir que dans votre dossier sprites , vous avez un lecteur qu'elle point PNG, qui signifie que tout est prêt à partir. Nous devons simplement inclure ce fichier dans notre code, ce que nous pouvons faire de la même manière que n'importe quel autre sprite. Je vais en faire une propriété de l'objet joueur, et je l'appellerai la feuille de sprite du joueur égale à ce graphisme, cette nouvelle image. Ensuite, nous avons besoin du chemin qui est le dossier sprites. Et le nom du fichier est Player Dash Sheet point PNG. Maintenant que cela est importé, je veux travailler à transformer cela en animation. Cela sera réalisé à l'aide certains logiciels open source. En particulier, nous utiliserons ici ce produit appelé Animate. Bien que ce dépôt ait maintenant quelques années, il est toujours très fiable et fonctionne très bien pour implémenter des animations amoureuses de D, il y avait plusieurs façons d' inclure ce code dans votre projet. Si Git est installé, vous pouvez accéder à cette liste déroulante de code, copier ce HTTPS, puis effectuer un clone git. Ou l'autre moyen de le faire est de télécharger le zip. Et une fois ce zip téléchargé, vous pouvez aller de l'avant et l'extraire. Et puis, ici, nous trouverons un fichier animé dot lou a. Vous allez vouloir copier ça. Et de retour dans notre dossier de projet, nous allons créer un nouveau dossier, je l'appellerai bibliothèques. Et dans ce dossier, nous allons coller dans ce point animé Lua. Une fois que vous avez cela, collez-le et vous pouvez voir ici, voudrez aller de l'avant et l'importer dans notre code. Je vais le faire juste au sommet de la charge de points d'amour. Et nous allons dire que animate est égal à besoin de bibliothèques, c' est-à-dire le dossier que nous venons de créer. Ensuite, le nom du fichier est animé. Maintenant, tout cela animent ce petit code est stocké dans cette variable globale appelée animate. À ce stade, nous pouvons commencer à créer nos animations. La première étape consiste à créer une grille qui aide la bibliothèque à diviser votre feuille de calcul en images individuelles. Vous pouvez consulter la page animés GitHub pour plus de détails sur tous ces éléments. Commençons donc par créer une grille pour l'objet joueur. Je vais appeler ça la grille de points du joueur égale à une nouvelle grille de points animés. Et dans ces parenthèses, il y a plusieurs paramètres que nous devons définir par rapport à la largeur et à la hauteur de chaque cadre individuel. Et dans notre cas, chaque image mesure 12 pixels de large et 18 pixels de hauteur. Si vous examinez de près la feuille de calcul que nous utilisons, vous verrez que chaque image présente un peu d'espace autour de celle-ci. Mais lorsque nous incluons cet écart, chaque image est de 12 sur 18. Ensuite, après avoir redéfini cette dimension, nous devons donner la largeur et hauteur de la feuille de calcul complète, que nous pouvons obtenir très facilement. Nous dirons une feuille de calcul de point de joueur. Et puis on peut dire deux-points, obtenir la largeur. Cette ligne va donc obtenir la largeur de notre feuille de sprite. De même, nous voulons obtenir la hauteur pour le paramètre suivant, les points du joueur, la feuille de sprite, appel et la hauteur. C'est donc tout ce dont nous avons besoin pour définir notre grille. Nous avons la largeur et la hauteur de nos cadres individuels ainsi que la largeur et la hauteur de la feuille de sprite complète. Et en fin de compte, cela nous donne notre grille. Maintenant, en utilisant cette grille, notre code saura comment diviser notre feuille de calcul en images individuelles. Et grâce à cela, nous pouvons créer nos animations. Nous allons donc stocker toutes ces animations dans une nouvelle table. En fait, je vais appeler ça les animations de points du joueur équivalant à une nouvelle table vide. Commençons par cette animation simple. Nous allons faire des animations de points de joueur vers le bas. Il s'agira de la première animation. Ensuite, nous allons mettre en œuvre la direction descendante. Et pour créer une animation, nous animons une nouvelle animation point. Et entre ces parenthèses, nous devons définir les cadres de cette feuille de sprite que nous voulons inclure. Et nous le faisons en utilisant la grille. Nous allons donc dire joueur cette grille. Ensuite, entre ces parenthèses, nous devons définir les lignes et les colonnes que nous voulons inclure. Le premier paramètre ici est celui des colonnes que nous voulons inclure, c' est-à-dire les colonnes un à quatre. Parce que nous avons quatre images allant de gauche à droite. Nous disons donc un à quatre entre guillemets simples comme ceci. Ensuite, on va mettre une virgule. Ensuite, nous voulons définir de quelle ligne nous voulons que cela provienne, qui dans notre cas, la direction descendante vient de la première ligne. Donc, nous allons juste en mettre un ici. Ensuite, après avoir défini les informations de notre grille de joueurs, nous mettons des virgules. Le paramètre suivant est le temps en secondes entre chaque image. Encore une fois, nos cadres vont se jouer uns après les autres rapidement, mais nous devions trouver à quelle vitesse nous voulons qu'ils partent. Je vais dire quelque chose comme 0,2 et tu peux ajuster ça plus petit ou plus grand. Cela signifie que l'image va changer de deux secondes pour notre animation, ce qui est assez rapide, mais vous verrez qu'elle semble vraiment naturelle lorsque nous rejouerons l'animation. C'est donc tout ce dont nous avons besoin pour définir notre animation et elle est stockée dans ce lecteur. Je vais donc copier cela et maintenant nous devons mettre à jour cette animation et dessiner l'animation. Donc, en mise à jour après tout ce code, je vais mettre en jeu cette animation est mise à jour des deux-points. Et cette mise à jour nécessite que nous transmettions DT. Et encore une fois, ça vient d'ici. Amoureux de mettre à jour, nous faisons simplement passer ce périmètre dans notre mise à jour d'animation. Et une fois que cela aura été mis à jour, nous pourrons descendre ici et je vais me débarrasser de notre tirage au sort du cercle. Ou vous pouvez également vous débarrasser de tout autre dessin que vous faites en plus de l'arrière-plan. Et je vais faire des animations de points de joueur, dessiner des deux-points vers le bas. Et le premier paramètre ici est la feuille de calcul que nous utilisons pour dessiner cette animation, qui est la feuille de sprite à points du joueur. Ensuite, c'est la position que nous voulons dessiner cette animation, qui est le point x du joueur et le point y. Et cela devrait le faire. Nous devrions voir l'animation jouer. Alors, sauvegardons ce fichier et commençons. Et un problème, mais vous remarquerez immédiatement, c'est que cette animation est beaucoup trop petite puisque j'ai choisi des graphismes rétro, ce sprite ne mesure en fait que 12 pixels sur 800 pixels, ce qui est très petit, mais nous sommes en mesure de l'augmenter un peu. Allons de l'avant et dans cette animation, c'est dessiner. Il y a quelques paramètres supplémentaires très similaires à la fonction habituelle adorée de nos graphiques pour dessiner. Le paramètre suivant est le champ de rotation optionnel. Nous ne voulons pas faire pivoter l'image. Nous allons donc faire zéro, ce qui signifie ne pas changer la rotation. Et puis après zéro comme facteur d'échelle X. On peut donc en mettre quelque chose comme 10. Cela signifie que l'ampleur de notre animation va être augmentée de dix fois. Et la mise en place d'une valeur pour l'échelle x signifie que l'échelle y adoptera également cette valeur puisque nous n'avons rien spécifié pour elle. Donc, avec cela, nous devrions nous attendre à ce que notre sprite soit 10 fois plus grand, ou je devrais dire notre animation. Allons-y et commençons. Et c'est là. Il est beaucoup plus grand, mais un problème notable est qu'il est floue. Nous pouvons empêcher notre mise à l'échelle de flouter les images si nous atteignons le sommet. Et nous le ferons juste après notre importation animée. Nous allons adorer le filtre par défaut de jeu de points graphiques. Et les valeurs ici sont les plus proches, les plus proches. Donc, avec cette ligne en place, elle fera en sorte que lorsque nous augmenterons nos graphiques, cela ne floue pas. Il suffit de prendre les pixels et de les mettre à l'échelle. Et maintenant, quand je commence, nous voyons notre animation fonctionner et elle a l'air plutôt bien. Et comme il est lié aux valeurs des points x et y du joueur, nous pouvons nous déplacer normalement, mais maintenant notre tâche suivante consiste à faire descendre les autres directions que nous avons, mais aucune des autres. Allons de l'avant et mettons-les mettre en œuvre. Nous allons les faire de la même manière que nous l'avons fait. Je vais en fait copier toute cette ligne ici. Et nous allons faire le prochain. Nous dirons à gauche. Maintenant, la direction de gauche se trouve sur la deuxième rangée. Je vais changer celle-ci par la deuxième rangée. Ensuite, nous avons maintenant, juste à la troisième rangée. Et puis, enfin, nous avons de haut en haut à la quatrième rangée. Maintenant, toutes ces animations sont très similaires. Ils se déroulent simplement sur des rangées différentes. C'est maintenant le défi de changer entre les animations. Parce qu'en ce moment, notre animation est dessinée et mise à jour en choisissant manuellement les animations de points du joueur pour ici et ici. En réalité, nous ne savons pas quoi rechercher les animations que nous voulons utiliser. Nous pouvons suivre cela avec une nouvelle propriété. Je vais appeler ça player.com. Et nous allons le définir comme une animation, disons les animations de points du joueur point à gauche. Maintenant, notre lecteur, cette propriété contient le lecteur aux animations qui sont restées. Nous pouvons donc l'utiliser pour suivre l'animation de nos joueurs. Au lieu de les mettre à jour manuellement, les animations sont tombées en panne. Nous sommes plutôt, selon l'enum point du joueur de mise à jour. Et même avec notre tirage au sort. Nous allons juste faire un tirage au point de joueur A&M. De cette façon, quelle que soit l'animation que nous avons assignée à cette valeur, c'est celle que nous allons voir. Donc, en ce moment, nous avons des animations de joueur qui lui ont été assignées. Donc, si nous sauvegardons et courons, nous voyons que la direction orientée vers la gauche est maintenant l'animation que nous voyons ici. À ce stade, nous voulons simplement modifier l' animation des joueurs pour qu'elle corresponde à la direction dans laquelle ils se déplacent. Cela peut être fait en ajoutant à nos commandes de mouvement et à la fonction de mise à jour. Par exemple, ici, nous maintenons la flèche droite enfoncée. Cela signifie que nous voulons probablement changer l'animation en point de joueur, en point d'animations, n'est-ce pas ? Donc, c'est juste ici. Je peux y aller de l'avant et le faire. Je dirai que le point nm du joueur est égal aux animations du joueur point, non ? De même, nous pouvons faire exactement la même chose dans ces quatre directions. reste donc celui-ci, le suivant est en panne. Et enfin, ce dernier est terminé. Donc, avec cela en place, si je sauvegarde et que je cours, chaque fois que j'ai changé de direction, l'animation des joueurs est mise à jour pour correspondre à cette direction. Il fonctionne plutôt bien. Le seul problème qui reste ici est que le joueur continue de marcher en place même après son arrêt. Et idéalement, ce sont des animations qui s'arrêteraient et se transforment en position immobile. Essentiellement, nous voulons changer l'image du joueur sur cette image, celle debout, lorsque aucune touche fléchée n'est enfoncée. Vous remarquerez que ce cadre debout est la deuxième image et chacune de ces lignes. Ainsi, lorsque aucune touche fléchée n'est enfoncée, l'animation s'en tient à cette deuxième image. Cela se produira encore dans notre section de mise à jour, nous allons devoir vérifier si aucune touche fléchée n'a été pressée sur ce cadre. Nous allons donc suivre cela avec une variable locale très simple. Au début de la trame va créer un local est en mouvement. Et nous allons mettre ça sur faux. Ensuite, nous voulons changer que cela devienne vrai. Si l'une des touches fléchées a été enfoncée sur ce cadre. Et nous pouvons le refaire, juste dans cette déclaration IF, nous pouvons simplement dire que le mouvement est égal à vrai. Parce que si la flèche droite est enfoncée, cela signifie que nous bougeons. Nous devons donc modifier cette valeur. Et je vais juste copier cette ligne et la mettre dans les quatre instructions if pour chacune des quatre directions. Ainsi, à la fin de notre méthode de mise à jour, nous saurons que le mouvement sera soit faux si touches fléchées ont été enfoncées ou true si l'un d'entre eux a été appuyé dessus. Et si aucun d'entre eux n'est pressé vers le bas, et voyons voir. Si est en mouvement est égal à faux. Ensuite, à ce stade de cette déclaration si, nous voulons changer l'animation des joueurs pour qu'elle devienne la deuxième image où ils sont immobiles. Et cela se fait avec player.com. Et il y a une fonction aller à l'image des deux-points. Et le cadre que nous voulons aller est le cadre numéro deux, qui est immobile. Si nous économisons et courons maintenant, le joueur reste immobile. Dès que je bouge, il recommence à marcher dans les quatre directions. Et quand je m'arrête, ils redeviennent immobiles. Et cela fonctionne dans les quatre directions. 6. Conception de niveau et tuile: Bonjour les amis. Dans cette vidéo, je vais montrer les bases de l'utilisation de tuile, un éditeur de niveau fantastique qui est indispensable pour les frameworks de jeu comme love 2D, qui ne possède aucun éditeur intégré, passera par le processus d'ajout d'un feuille de style, conception d'une carte et importation de notre niveau dans un jeu Love 2D. Tout d'abord, vous devez disposer d'un jeu de tuiles à utiliser pour cela. s'agit d'une image de grande taille avec un tas de pièces individuelles que nous utiliserons pour concevoir notre niveau. Vous pouvez télécharger ce jeu de tuiles PNG à partir de l'onglet Projets et ressources ci-dessous. Une fois que vous l'avez prêt, j'aime garder mes affaires organisées. Donc, dans mon dossier de projet de jeu, je vais créer un nouveau dossier et je vais l'appeler des cartes. Et puis, dans ce dossier de cartes, je vais coller dans cette image PNG de tuiles. Ensuite, vous devrez télécharger tuiled. Notez qu'il s'agit d'un outil de tarification de votre propre nom. Donc, bien que vous puissiez le télécharger gratuitement si vous le trouvez utile, je vous recommande vivement de payer un peu d'argent pour soutenir le développeur. Une fois que vous avez installé le carreau, lancez-le. Et nous pouvons créer une nouvelle carte en accédant à File new, new map. Et dans cette fenêtre, désolé, c'est un peu plus petit. Ce texte n'est pas bien mis à l'échelle ici, mais les parties supérieures ici peuvent toutes rester à leurs valeurs par défaut, c'est-à-dire CSV orthogonales et écrites. Vous trouverez ensuite la taille de la carte. Nous pouvons choisir le nombre de tuiles largeur et de hauteur de notre carte. Je pense que cette valeur par défaut, 30 par 30, va bien ici. Enfin, nous devons spécifier la taille de notre tuile, qui correspond à la taille de chaque carreau. Cela dépend du jeu de tuiles que vous utilisez. Mais avec la mienne, chaque tuile mesure 64 pixels de large et 64 pixels de hauteur. Ensuite, nous cliquerons sur Enregistrer sous que vous souhaitez accéder au dossier de votre projet de jeu. Et je vais l'enregistrer dans le dossier Maps. Et Alice appelle simplement cette carte de test et cliquez sur Enregistrer. Une fois que cela est enregistré, l'éditeur tuilé doit apparaître, c'est là que nous concevrons notre niveau. abord, nous devons importer notre jeu de tuiles. Cela se produit dans ce coin inférieur droit avec ce nouveau bouton de jeu de tuiles. abord, nous devons lui donner un nom à nouveau, désolé, c'est petit. Je nommerai ces tuiles de test , puis je m'assurerai que vous avez activé l'intégration dans la carte. Ensuite, nous avons besoin d'un toot, notre source, qui, si nous naviguons, nous allons revenir à notre dossier de cartes et trouver nos tuiles, cette image. Ensuite, précisez à nouveau la largeur et la hauteur de la tuile, qui dans notre cas sont de 64 sur 64, puis de la marge et de l'espacement. Vous pouvez ajuster ces valeurs s'il existe des espaces entre ou autour des tuiles. Mais dans mon cas, toutes les tuiles sont juste à côté de l'autre, sans espace entre les deux. L'espacement sera donc 0 et il n'y a pas de marge autour de la bordure du jeu de tuiles. La marge sera donc égale à 0. Et quelle est la configuration de l'autre ? Allez-y et cliquez, OK. Et en bas à droite, vous devriez voir apparaître votre jeu de tuiles. À ce stade, vous pouvez maintenant cliquer sur n'importe laquelle de ces tuiles individuelles et les utiliser pour dessiner des parties de votre carte. Et vous pouvez l'utiliser pour concevoir votre niveau. En fait, je vais commencer par mettre une ligne de base de cette image graminée. Et je vais utiliser cet outil de remplissage de peinture pour mettre de l'herbe partout. Ensuite, je peux choisir des tuiles individuelles et utiliser l'outil tampon pour dessiner comme mes tracés individuels pour le reste du niveau. Une chose que vous remarquerez peut-être lors de la conception est que si vous essayez de faire, disons, un de ces arbres et de le mettre ici, cela supprime en quelque sorte l'herbe en dessous. Donc, et c'est parce que les parties environnantes de la tuile sont transparentes. Il remplace donc l'herbe qui l' entoure par la même transparence. Nous pouvons contourner ce problème en créant une nouvelle couche. En ce moment, nous travaillons à partir de cette couche de tuiles 1. Eh bien, nous pouvons créer une nouvelle couche de tuiles et je l'appellerai des arbres. Maintenant, si je retourne à cette queue, je remplace cette tuile par du grossier. Dès que je retourne aux arbres tuiles de l'air. Maintenant, chaque fois que je mettrai sera mis sur cette nouvelle couche. Donc, tout le monde ne va pas être remplacé. Cela résout donc ce problème. Et pendant que nous y sommes, je pourrais aussi bien remplacer ce nom par quelque chose comme du terrain. Et à partir de là, il ne s'agit que de concevoir votre niveau. Alors allez-y et passez en revue et concevez votre niveau comme vous le souhaitez. Je garde cela très simple pour l'instant, mais chaque fois que vous avez fini avec votre carte, vous pouvez enregistrer le projet, puis aller à Export de fichiers. Nous allons maintenant exporter notre projet. Accédez ensuite au dossier de votre projet de jeu. Et encore une fois, je vais mettre cette aversion à l'exportation dans notre dossier de cartes. Et vous verrez en bas que nous l' enregistrons sous forme de fichier Lua. Je vais appeler ça la carte de test. C'est donc très pratique car l'amour utilise aujourd'hui Lua, ce qui rend le processus de conversion assez simple. Alors allez-y et économisez. Et notre carte est maintenant exportée sous forme de fichier Lua. Maintenant, pour intégrer cette carte dans notre projet d'amour il faudra utiliser un logiciel open source. Vous pouvez utiliser cette URL pour accéder à la page GitHub pour la simple implémentation tuilée de la bibliothèque. Cette bibliothèque lira cette carte exploitée et aidera à retirer toutes ces tuiles dans le jeu. Donc, pour obtenir ce code, vous pouvez soit cloner ce dépôt si vous savez comment le faire, ou si vous ne savez pas comment le faire, vous pouvez accéder au code et nous allons simplement télécharger le fichier zip. Ensuite, une fois téléchargé, vous allez vouloir extraire le fichier zip, puis naviguer dans ces dossiers. Et ce que nous voulons vraiment, c'est ce dossier STI. Sti est synonyme de simple implémentation tuilée. Bien sûr. Maintenant, je vais copier ce dossier, puis revenir à notre dossier de projet de jeu. J'aime conserver tout mon code open source dans le dossier d'une bibliothèque, mais vous pouvez l'organiser comme bon vous semble. Je vais juste coller dans ce dossier STI. Et une fois que vous avez ce dossier STI prêt, nous pouvons l'inclure dans notre code avec love dot load. Mais au sommet de l'amour, cette charge que je vais mettre en STI est égale à exiger. Et puis dans ces guillemets simples, je vais mettre le chemin d'accès à ce dossier, qui était la barre oblique des bibliothèques STI. Et qui importent tout le code STI dans cette variable STI. Ensuite, nous pouvons créer notre carte ou la charger dans le jeu en la stockant dans une variable. J'appellerai que la carte du jeu est égale à STI, parenthèses. Et dans ces parenthèses, nous devons fournir le chemin guillemets simples vers notre fichier cartographique exporté, qui se trouvait dans le dossier Maps, test oblique IMAP dot Lua. Depuis que notre carte a été exportée sous forme de fichier Lua. Et maintenant que cette carte est chargée dans la carte de jeu, il ne reste plus qu'à la dessiner. Donc, en bas et en fonction de dessin, nous allons nous débarrasser de tout autre arrière-plan que nous dessinons. Et au lieu de cela, je vais faire une carte de jeu, deux points, dessiner. Et c'est tout. Une très petite note est si vous utilisez l'exemple de projet, je vais modifier cette échelle du lecteur à six contre 10, juste pour qu'elle corresponde un peu mieux aux tuiles. Mais chaque fois que vous êtes prêt, allez-y et sauvegardez le projet et exécutez. Et ça a marché. Nous avons nos tuiles en place et nous pouvons jouer le jeu comme d'habitude. Cela couvre les bases de l'utilisation de cartes tuilées et de l'importation de cartes dans vos projets Love 2D. Un problème notable est que nous sommes coincés dans ce coin supérieur gauche de notre niveau de jeu. n'y a donc aucun moyen de voir le reste. Dans la vidéo suivante, nous ajouterons une caméra qui suit le lecteur qui nous permettra explorer tout l'espace. 7. Caméra: Bonjour les amis. Dans cette vidéo, je vais montrer comment ajouter une caméra à vos jeux 2D amoureux afin qu'il suive le joueur et vous puissiez explorer plus de vos niveaux. Tout ce dont vous avez besoin pour commencer un projet où vous souhaitez que la caméra suive. Dans mon cas, j'ai cet objet joueur et point x du joueur et le point y du joueur représentent la position du joueur. Si je lance le jeu tel quel, c'est à quoi il ressemble actuellement. Mais bien sûr, il n'y a pas de caméra, donc je ne peux pas vraiment explorer tout l'espace. Même chose pour de nombreuses tâches. Nous pouvons ajouter une caméra très facilement en utilisant des logiciels open source. Accédez à cette URL pour accéder à la page GitHub pour bosse, qui signifie aide ou utilitaires pour une progression massive. Hump est une collection de plusieurs outils différents, dont ce fichier .capture caméra. Allez-y et clonez ce dépôt. Ou si vous ne savez pas comment faire cela, vous pouvez passer au code, puis le télécharger sous forme de Zip. Ensuite, vous voudrez simplement extraire ce fichier zip. Et puis, dans le dossier, nous trouverons simplement ce fichier .capture de caméra. Allez-y et copiez ça. Et puis de retour dans notre dossier de projet de jeu, dans le dossier de la bibliothèque, je vais aller de l'avant et coller dans ce fichier de caméra. Si vous n'avez pas actuellement de dossier de bibliothèque, vous pouvez en créer un juste à côté votre point principal Lua et l'appeler bibliothèques. Une fois cela ajouté, revenez à votre code et nous allons importer ce code de caméra dans Love Dot Load. Je vais simplement faire des appareils photo égaux requis. Et à l'intérieur des guillemets simples, je ferai le chemin d'accès au fichier camera.capture, qui est la caméra oblique des bibliothèques. Maintenant, le fichier camera.capture est chargé dans cette variable de caméra, et nous pouvons l'utiliser pour créer un objet caméra réel. J'appellerai que cette caméra est égale à la caméra. Par conséquent, appeler cela comme fonction génère essentiellement un objet de caméra et est stocké dans le CAM. Donc, chaque fois que nous voulons travailler avec la caméra, appellerons cette variable cam. Maintenant que cela a été créé, nous pouvons modifier nos sections de dessin pour que tout soit vu à travers l'objectif de cet appareil photo. Nous le faisons au début de la section de la mâchoire. Nous allons attacher le côlon de came, puis nous mettrons en retrait tout le reste. Et puis, une fois que tout est dessiné, va se détacher du côlon. Comme cela, peut attacher des marques au point où nous commençons à dessiner des choses du point de vue de la caméra. Et le détachement CAM est le point où nous avons cessé de regarder à travers la caméra. Donc, dans ce cas, tout est tiré du point de vue de la caméra. Maintenant, si vous dessinez une carte tuilée en utilisant simple implémentation de tuiles comme je le fais ici. En fait, nous ne pouvons plus utiliser cette notation de drauf deux-points de carte de jeu. Malheureusement, cela est un peu en conflit avec une caméra. Nous devons donc dessiner chaque couche de notre carte de tuiles individuellement. Si vous jetez un coup d'œil à ma carte tuilée, j'ai deux couches. J'ai du terrain et j'ai des arbres. Nous devons donc dessiner chacun de ces calques individuellement. Et je peux le faire en me débarrassant de cette mâchoire côlon de la carte de jeu. Et au lieu de cela, je vais faire une couche de dessin de deux-points de carte de jeu. Et à l'intérieur des parenthèses, nous devons spécifier le calque que nous voulons dessiner va d'abord dessiner la couche de sol. Nous obtenons donc cela avec une carte de jeu, des couches de points. Ensuite, entre crochets, nous devons spécifier le nom de chaîne de notre couche, qui est rectifiée. Et même chose, je vais copier ça et on va faire la même chose, mais pour les arbres. À ce stade, toutes nos couches de cartes de jeu sont dessinées, ainsi que le joueur est dessiné dans la perspective de la caméra. Si nous devions sauver et courir maintenant, le jeu ne sera probablement pas différent. Et c'est parce que notre appareil photo est immobile pour le moment. Nous devons le modifier pour qu'il suive toujours. Le joueur va le refaire dans notre code dans les sections de mise à jour. Donc dans la mise à jour aimée, probablement au bas de la mise à jour Love Dot. Après tout ça, je vais juste mettre le côlon CAM. Regardez, nous allons le placer à position du joueur point x et du point y. Ainsi, chaque image va déplacer la position de la caméra pour qu'elle corresponde à l' endroit où le joueur se trouve. Si nous économisons et exécutons maintenant, cela fonctionne. La caméra suit maintenant le lecteur. Il peut remarquer un peu un problème de compensation cependant. Le joueur est un peu décentré, il est un peu en bas et trop à droite. Et c'est parce que la caméra suit actuellement le point x du joueur et le point y du joueur, ce qui représente actuellement le coin supérieur gauche de l'image de nos joueurs. Par défaut, toutes les animations et tous les sprites seront dessinés en haut à gauche. Et dans ce cas, nous préférerions dessiner depuis le centre de l'image pour que notre caméra soit centrée sur tout. Donc, dans notre code, nous allons descendre à l'endroit où nous dessinons le joueur qui est ici. Nous dessinons notre animation. Et nous devons mettre à jour ces variables de décalage. Nous avons donc ici notre rotation, puis nous avons notre échelle x. Ensuite, après l'échelle x, c'est l'échelle y, qui sera nulle. Mais après l'échelle y est 0 x et 0 y, ce que nous voulons spécifier. Pour OX, nous voulons la moitié de la largeur du sprite, soit 6, car la largeur est de 12. Ensuite, pour le décalage, pourquoi nous voulons la moitié de la hauteur, la hauteur est de 18, donc nous en mettrons neuf. Avec cela en place, si nous sauvegardons et exécutons maintenant, nous verrons que notre caméra est maintenant centrée et que le lecteur se trouve directement au centre de notre prise de vue. La dernière chose que vous pouvez aborder, et c'est complètement facultatif, mais vous pouvez empêcher la caméra de montrer cet arrière-plan noir hors écran qui va au-delà de l'endroit où se trouve notre carte, tout ce que nous avons à faire est d'arrêter le la caméra ne bouge pas lorsqu'elle atteint trop loin et près de la frontière. Commençons par aborder d'abord la frontière gauche. Ainsi, dans notre fonction de mise à jour, juste après avoir regardé notre caméra, nous allons faire une déclaration if dans laquelle nous vérifions la largeur et la hauteur de l'écran. Prenons d'abord la largeur de l'écran et nous le stockons dans une variable W locale. Et nous obtenons la largeur en faisant des graphismes morts aimés et papa obtient de la largeur, et cela obtiendra la largeur de notre fenêtre de jeu. Ensuite, nous ferons local il est égal à Ag graphics dot GetHight. Et cela aura la hauteur de notre fenêtre de jeu. Maintenant, quand nous devons le faire, c'est vérifier la position de la caméra et la comparer à cette largeur. Nous allons donc faire une déclaration si. Nous dirons si le point de la caméra x ou la position x de notre caméra est inférieure à la moitié de la largeur, ce qui signifie que nous sommes juste à la bordure, mais nous ne voulons pas aller plus loin. Ensuite. Nous voulons simplement changer le point de came EXE à la moitié de la largeur. La moitié de la largeur place l'appareil photo juste assez loin du bord de notre écran pour qu' il ne montre pas cet arrière-plan noir. Et si nous économisons et courons maintenant, si je vais trop loin à gauche, nous verrons que les caméras s'arrêtent dès que nous atteindrons cette frontière. Ce fond noir n'apparaît nulle part sur le côté gauche de l'écran. Faisons la même chose pour la frontière supérieure. Nous le faisons de la même manière. Je vais juste copier ça. Et au lieu de vérifier Campbell x, nous allons vérifier Kim Dot y dans ces deux endroits et aussi vérifier h. Nous vérifions la hauteur de notre fenêtre de jeu cette fois. Si nous économisons et courons maintenant, nous verrons que nous ne pourrons plus passer cette frontière supérieure. Il ne montre pas le contour noir. Ensuite, pour les bordures droite et inférieure un peu plus délicates car nous devons obtenir la largeur et la hauteur de notre arrière-plan. Alors, après tout ça, je vais avoir une autre variable locale. Je vais l'appeler carte locale W, comme dans la largeur en pixels de notre carte de jeu. Cela se fait avec la largeur du point de la carte de jeu fois la largeur de la tuile de point nmap. Et ce que cela représente, c'est le nombre de tuiles larges. Notre carte K représente le nombre de pixels de largeur d'une tuile dans notre carte K. Comme vous l'avez mentionné, cette partie n'est possible que si vous utilisez une carte tuilée. Si vous utilisez un arrière-plan normal, ce ne serait que les arrière-plans avec aucun de ce calcul ici. Nous ferons la même chose pour la hauteur de la carte. carte h est égale à la hauteur des points de la carte de jeu, papa, hauteur de marée. Nous avons maintenant la largeur et la hauteur de notre carte en pixels. Et je vais vous montrer le code final. Si nous avons cartographié la hauteur d'une carte, nous l'utilisons pour calculer où peut et peut, pourquoi devrait-on aller quand ils atteignent les bordures droite et inférieure ? Pour la bordure droite, nous la mettons égale à la largeur de notre carte, qui est cette variable ici, moins la moitié de la largeur de nos fenêtres de jeu. Et cela nous place juste à la frontière où il ne montre rien hors écran. Même idée avec la caméra. Pourquoi nous obtenons la hauteur de notre carte. Ainsi, en bas, nous soustrayons la moitié de la hauteur de notre fenêtre de jeu, ce qui place la caméra juste à la bordure où elle ne montre aucun fond noir. Si nous sauvegardons et courons maintenant, si je descends en bas à droite, il s'arrête à la bordure droite, et il s'arrête également à la bordure inférieure. À ce stade, notre appareil photo ne peut donc pas se déconnecter de l'écran. Une dernière chose que je veux démontrer pour la caméra, c'est si vous vouliez avoir un HUD ou quelque chose qui apparaît juste devant la caméra. Vous le faites en dessinant quelque chose en dehors de la boîte de rangement. Donc, par exemple, essayons simplement cela avec une impression à points graphiques Love Die. Et je vais imprimer bonjour. Et cela sera imprimé à la position 10. 10. Bien qu'il soit très petit, vous pouvez voir ce petit bonjour. Et le coin supérieur gauche, et il reste là où va la caméra , car elle est dessinée en dehors de la perspective de la caméra, elle agit comme un HUD. Dans la prochaine leçon, nous discuterons des bases de la physique, ce que nous devons connaître avant pouvoir implémenter des collisions réelles dans ce jeu. 8. Physique: Bonjour les amis. Dans cette vidéo, je vais expliquer les bases de l'utilisation de la physique dans Love 2D et comment créer rapidement des collisionneurs qui interagissent entre eux et qui répondent éventuellement à la gravité. Vous n'avez besoin de rien pour commencer avec ce projet amoureux 2D, nous en ferons même un tout nouveau si vous suivez les leçons précédentes, cette vidéo fournit des informations supplémentaires dont nous avons besoin à couvrir avant de continuer avec cela. Maintenant, pour la physique, il existe un module intégré directement dans l'amour, et il est très puissant. Malheureusement, cela signifie que c'est également compliqué. Mais il existe des bibliothèques open source qui facilitent grandement l'utilisation de la physique. Le plus populaire est le champ éolien. Lorsque field fournit un tas d' outils très faciles à utiliser pour nous qui rendent le démarrage beaucoup plus rapide et votre code sera plus facile à écrire. J'utilise personnellement la bibliothèque pour tous mes jeux, même si elle a été archivée récemment, elle reste entièrement fiable avec les dernières versions de l'amour. Et cela fait vraiment une énorme différence. Pour que ce code soit inclus dans votre projet, vous pouvez soit cloner le dépôt si vous savez comment le faire, soit aller de l'avant et accéder au code et télécharger le zip. Ensuite, vous voudrez simplement extraire le dossier. Et puis à l'intérieur, nous voulons trouver ce dossier de champ de vent situé juste à côté du fichier Read Me. Alors, copiez ceci , puis accédez au dossier de votre projet de jeu. Dans mon cas, j'utilise un tout nouveau projet pour cette démonstration. C'est juste un fichier main.py. Je vais créer un nouveau dossier. Je vais appeler ça des bibliothèques. Puisque je mets toujours mon code open source dans le dossier d'une bibliothèque. J'irai ici, puis je vais coller dans ce dossier de champ de vent. Maintenant, allez-y et ouvrez votre point principal Lua. Et pour cette démonstration, je commence par un fichier vide. Donc, pour commencer, je mets toujours la mise à jour de chargement et les fonctions de dessin comme je l'ai fait ici. Et la première chose que nous allons faire est d'importer ce dossier Wind Field que nous venons de copier dans nos bibliothèques. Nous allons donc le faire avec WWF égal à requis. Et puis, dans ces guillemets, nous ferons le chemin d'accès à ce dossier qui était le champ de vent oblique des bibliothèques. N'oubliez pas que nous importons un dossier de champ de vent entier et qu' il sera placé dans cette variable WWF. Et c'est importé, nous pouvons l'utiliser pour commencer à travailler avec la physique. La première étape pour travailler avec l'amour la physique est de créer un monde. Quelqu'un devait dire que World équivaut au WWF dot nouveau monde. Un monde est simplement un espace où des objets physiques existent et nous utilisons le monde pour créer réellement nos objets. Par exemple, créons un objet joueur. Le joueur est égal au deux-points du monde. Et nous allons en faire un rectangle. Nous dirons un nouveau collisionneur rectangle. Ensuite, ces parenthèses à l'exception de quelques paramètres. La première est la position dans laquelle nous voulons que notre joueur commence. Je vais donc les mettre en position 354 x, puis 100 pour Y. Ensuite, nous voulons la largeur et la hauteur de notre rectangle. J'y arriverai avec AT et hauteur 80. Maintenant, notre joueur est un collisionneur de rectangle et il est stocké dans cette variable de joueur. Et quand je dis collider, je parle d'un objet physique qui existe dans notre monde. Une partie de ce que fait le champ, c'est que cela rend les collisionneurs si faciles à utiliser. Normalement, avec la bibliothèque de physique habituelle, vous devez définir un corps de luminaire et une forme, puis suivre tout séparément. Un collisionneur provenant d'un champ de vent est une combinaison des trois en un seul endroit, ce qui le rend beaucoup plus simple. Avant de sauvegarder et de lancer le jeu, nous devrions ajouter deux choses rapides. Tout d'abord, nous voulons ajouter la mise à jour des deux-points mondiaux. Cela permet de s'assurer que le monde est mis à jour et que toute la physique soit mise à jour. Ensuite, dans le tirage au sort, je vais mettre dans le dessin du côlon mondial. Maintenant, ce que fait le colon mondial, c'est qu'il dessine les formes de tous les collisionneurs de notre monde. Donc, je vais aller de l'avant et économiser et courir. Et voilà, cet objet rectangle ici est notre collisionneur de joueurs. Mais il ne fait rien. Une chose que nous pourrions faire est donner de la gravité à ce monde. Cette nouvelle fonction mondiale accepte en fait quelques paramètres optionnels, dont les deux premiers sont la définition de la gravité. Donc si je fais 0, essayons 100. Ce serait la gravité vers le bas. Il s'agit de la valeur x correspondant à notre gravité, et il s'agit de la valeur y. Donc, comme nous avons juste une valeur positive pour y, positif signifie descendre. Donc, tous nos objets physiques doivent être affectés par une gravité descendante. Donc, si nous économisons maintenant et que nous courons, nous verrons que notre collisionneur de joueurs tombe maintenant vers le bas. Mais il tombait assez lentement. Donc, ce que nous pourrions faire, c'est faire passer ces 100 à 500. Cela rend la gravité plus intense. Par conséquent, notre joueur tombe à un rythme plus rapide. Cependant, tous les objets ne doivent pas être affectés par la gravité. Démontrons cela en créant une plateforme sur laquelle notre joueur peut atterrir. Nous appellerons ça de terre, et nous allons faire des deux-points du monde, un nouvel encombrement de rectangle. Et sa position. Je vais le mettre à cent ans. Quatre cents, c'est sa position. Et ensuite la largeur sera 600 et la hauteur sera de 100. Donc, si nous devions sauver et courir maintenant, nous voyons notre terrain, mais cela suit aussi avec gravité. Afin de rendre le sol moins sujet à gravité ou d'ignorer complètement la gravité, nous devons changer de type. Nous pouvons faire le type de jeu de deux-points de masse sur statique. Donc, si nous sauvegardons et courons maintenant, notre terrain est statique, ce qui signifie qu'il n'est pas affecté par gravité et que le joueur atterrit dessus. Et je viens de mentionner qu'il existe des forces que vous pouvez appliquer aux collisionneurs. Faisons sauter notre joueur en utilisant une impulsion. Donc, après tout ça, je vais mettre dans une fonction aimée notre touche pressée. Et ici, nous allons vérifier si la touche est égale à AP, ce qui signifie que nous appuyons sur la flèche vers le haut, puis nous appliquerons notre impulsion. Nous allons dire que le côlon du joueur applique une impulsion linéaire. Et l'impulsion que nous appliquerons est de 0. Et essayons le négatif 5000. Maintenant, une impulsion linéaire n'est qu'une force rapide qui pousse sur le collisionneur. Dans ce cas, nous avons appliqué une valeur y négative appliquée au joueur. Puisque ce 5000 négatif est en position y, cela va pousser le joueur vers haut car le négatif augmente. Si nous sauvegardons et courons. Lorsque j'appuie sur la flèche vers le haut, le joueur fait un petit saut parce que nous appliquons cette impulsion linéaire. Il existe de nombreuses autres actions que vous pouvez appliquer à un collisionneur. Faisons en sorte que le joueur se déplace à gauche et à droite en utilisant une force cette fois-ci plutôt qu'une impulsion. Nous allons donc le faire dans notre fonction de mise à jour, puis nous allons attacher cela aux flèches indiquant, si vous l'aimez, que le point du clavier est en bas et nous dirons à gauche. Donc, lorsque la touche fléchée gauche est pressée, nous appliquerons une force, dira que le deux-points du joueur applique la force. Et nous ferons 5000 négatifs en position x cette fois. Il va donc nous déplacer vers la gauche. Et puis nous dirons autre chose, si j'ai aimé notre clavier qui est en panne. Et dans ce cas, nous ferons la même chose. Appliquez la force, mais nous ferons 5000 positifs, ce qui nous déplacera vers la droite. Et cela devrait suffire si nous sauvegardons et courons, où si j'appuie sur la gauche, je commence à me déplacer à gauche, et si j'appuie sur la droite, je commence à me déplacer à droite, quelque sorte glisser le long du sol. La chose à noter au sujet des forces, cependant, c'est que les forces continuent à s'empiler et à grandir plus intenses. Pourquoi le joueur accélère autant lorsqu'il se déplace vers la gauche et la droite. Si vous vouliez limiter cela, vous ne pouvez appliquer une force que lorsque le joueur ne se déplace pas déjà à la vitesse maximale. Nous pouvons en finir avec ça. Nous allons donc appliquer cette force ici uniquement si le joueur en a besoin pour atteindre la vitesse maximale. Sinon, nous ne voulons pas l'appliquer, sinon il y aura trop vite. Donc d'abord pour obtenir la vitesse réelle des joueurs telle qu'elle est dans cette image, nous pouvons faire PX local, PY est égal au deux-points du joueur, obtenir une vitesse linéaire. Et cette fonction va saisir la vélocité du joueur et mettre sa valeur x en p x et sa valeur y en PY. Nous pouvons donc maintenant vérifier la valeur P x ici pour déterminer si nous voulons réellement appliquer cette force. Donc ici, sur cette ligne, je vais dire, et px est supérieur à 300 négatifs. Nous allons donc faire en sorte que le négatif 300 soit la vitesse maximale que nous pouvons atteindre. Nous n'appliquerons donc la force que si nous sommes en dessous de ce seuil. La même chose pour le bon. Nous dirons, et P x est inférieur à 300 points positifs. Donc, faire un négatif 300 pour la direction gauche, se déplacer à gauche et positif pour la bonne direction. Aussi, pour rendre les choses un peu plus accrocheuses, je vais changer ce 5000 ici en 8000. Cela nous permettra d'accélérer un peu plus vite. Donc si j'économise et que je cours maintenant, si je tiens à gauche, j'ai bougé à gauche, et si je tiens à droite, je me déplace à droite. Mais vous remarquerez que je ne finis pas trop vite comme je le faisais avant. Dans l'ensemble, ce jeu que nous venons de créer pourrait être le début d'un projet complet de plateforme. Et nous avons pu le mettre en place assez rapidement. La page GitHub pour le champ de vent fournit des tonnes d'informations utiles sur l'utilisation de la physique. Je recommande vivement de le lire. Pour la prochaine vidéo, je vais prendre les concepts discutés ici et les appliquer au jeu de style haut vers le bas des vidéos précédentes. 9. Collisions: Bonjour les amis. Dans cette vidéo, je vais montrer comment ajouter des murs et des collisions à votre jeu 2D amoureux afin que votre personnage ne puisse pas simplement traverser les murs. De plus, je vais montrer comment générer ces murs en jeu de votre tuile en carte. Pour commencer, nous devrons utiliser quand field, dont j'ai parlé dans une vidéo précédente. Ces premières étapes seront les mêmes que celles de cette vidéo. Et vous allez d'abord accéder à la page GitHub ici et la cloner dans votre projet ou vous pouvez la télécharger sous forme de Zip. Bien sûr, vous voudrez extraire ce fichier zip. Et ensuite, nous allons aller chercher ce dossier de champ de vent. Il se trouve juste à côté de ce fichier README. Je vais copier ça. Et de retour dans notre dossier de projet de jeu, je vais aller dans le dossier de notre bibliothèque et coller ce dossier de champ de vent ici. Une fois ce dossier prêt, nous devrons l'inclure dans notre code. Donc, en haut, je vais ajouter dans WWF égal à requis. Et puis le chemin est des bibliothèques champ de vent oblique. Gardez à l'esprit que cela charge l'ensemble du dossier du champ de vent dans cette variable WWF. Maintenant, nous pouvons utiliser cette variable pour créer notre monde, dira que World est égal au WWF et ce nouveau monde. Et puis pour les paramètres de gravité, il s'agit d'un jeu de style RPG haut vers le bas. Nous n'aurons donc pas de gravité 0 virgule 0. Nous devons également mettre à jour le monde, ainsi que notre fonction de mise à jour. Et nous allons mettre ça après notre code de mouvement de joueur. Donc, probablement ici. Et nous allons dire « Mise à jour du côlon mondial ». Et ensuite, nous devons passer en DT comme ça. Et puis finalement descendre et dessiner temporairement, nous allons dessiner le monde. Nous allons donc dire « tirage au colon mondial ». Cela nous permettra de voir les collisionneurs que nous créons. Mais en fin de compte, nous voudrons probablement supprimer cela car nous ne voulons pas vraiment voir tous ces planeurs et le produit final. Sachez également que nous le dessinons à l'intérieur de notre appareil photo pour qu'il apparaisse dans l'objectif de l'appareil photo. Maintenant que c'est en place, nous devons donner à notre joueur un collisionneur, ou essentiellement un objet physique qui lui permet d'entrer en collision avec les murs. Revenez donc au sommet où nous définissons notre joueur. Je vais aussi lui donner un collisionneur. collisionneur de points du joueur est égal au deux-points du monde, et ensuite nous allons en faire un rectangle BSG. Donc, nouveau collisionneur rectangulaire BSG. Maintenant, un rectangle BSG ressemble beaucoup à un rectangle normal, mais ses coins sont un peu creusés. C'est plutôt une forme octogonale qui, selon mon expérience, fonctionne un peu mieux pour les personnages des joueurs. Maintenant, pour les paramètres, le premier est les positions x et y. Donc pour x, je vais faire 400, et pour y, je ferai 250. Ensuite, nous avons besoin de la taille, de la largeur et de la hauteur de ce rectangle BSG avec 40 et la hauteur je ferai 80. Et puis il y a un autre paramètre qui détermine à quel point ces coins sont creusés. Pour vous aider à démontrer cela, je vais commencer. Et puis une autre chose que je vais faire avec ce Collider ne va pas le rendre incapable de faire pivoter quelque chose car un collisionneur de points de joueur définit la rotation fixe sur true. Cela empêche donc le collisionneur de tourner autour. Maintenant que c'est en place, je vais économiser et courir. Et nous pouvons voir que notre encombrement est ici. Et vous pouvez voir ce que je veux dire par les coins sont creusés, donc c'est comme un rectangle normal, mais ces coins sont inclinés, donc c'est plus ovale, plus techniquement c'est un octogone. Mais vous remarquerez que le collisionneur ne bouge pas actuellement, il reste juste en place. Ce que nous voulons maintenant, c'est la position du joueur corresponde toujours à cette position de collisionneur ici. Pour y parvenir, nous allons, après avoir mis à jour le monde, nous allons également définir le point x du joueur égal à joueur Dot Collider, deux-points GetX. Et la même chose avec le point y du joueur blanc égal au collisionneur de points du joueur obtient y. Donc maintenant, la position du joueur s' alignera toujours avec le collisionneur. Nous économisons et exécutons maintenant, nous sommes uniformément égalés, bien que la taille doive probablement être ajustée un peu. Nous allons donc d'abord le faire. Je vais revenir à l' endroit où nous avons créé le collisionneur pour le joueur. Je vais augmenter la largeur, disons à 50. Et nous allons faire 100. Et je peux aussi changer ce 14 pour qu'il soit moins concave. Je vais le changer en dix. Essayons donc ça. C'est beaucoup mieux. Il est beaucoup plus proche de correspondre aux paramètres du joueur ou à la taille du joueur. Mais maintenant, vous remarquerez que nous ne pouvons plus bouger. Et c'est parce que nous verrouillons toujours la position du joueur à la position des collisionneurs. Et comme le Collider ne bouge pas, nous ne pouvons pas non plus bouger. Pour y remédier, nous allons retravailler tout le code de mouvement que nous avons fait pour le joueur, mais le modifier pour qu'il s' adresse plutôt au collisionneur. Donc, tout ce code se produit en cours de mise à jour pour ces instructions if qui vérifient l'entrée du clavier et la façon dont nous nous déplaçons normalement modifient l'exposition. Mais ce que nous allons faire, c'est changer la vitesse du collisionneur. Donc, pour y parvenir, je vais créer de nouvelles variables locales. Je vais dire vx local et le définir sur 0 et VY local et le définir à 0. Ils vont donc représenter la vitesse dans direction X et la direction Y de notre collisionneur. Maintenant, au lieu de mettre à jour Platon dot x, définissons vx égal à la vitesse du joueur. Et de même avec tous ces autres, va changer vx. Équivaut à la vitesse du point du joueur. Mais puisque nous allons à gauche, nous voulons que ce soit négatif. Nous multiplions donc les temps de vitesse joués négatifs 1. Et ensuite, ici pour monter et descendre, nous allons mettre à jour VY. Vy est égal à la vitesse de lecture pour le bas, puis v y est égal à la vitesse du joueur. Mais comme nous progressons, nous devons multiplier cela par négatif. Et après tout cela, nos valeurs VX et VY sont mises à jour pour correspondre à l'entrée de notre clavier. Nous pouvons donc simplement dire collisionneur de points du joueur, vitesse linéaire de jeu de deux-points. Et cette fonction de vitesse linéaire prend en compte deux paramètres, l' un pour la vitesse x et l'autre pour la vitesse y. Nous pouvons donc passer en v x pour le x puis en v y pour le y. Donc, quelle que soit l'entrée du clavier que nous mettons en place, elle s'alignera avec ces deux paramètres et à jour la vitesse linéaire de notre collisionneur. Donc, si nous économisons et essayons cela maintenant, si je maintiens certaines directions, nous pouvons voir que je bouge un peu, mais je vais très lentement. Et c'est parce que nous mettons à jour ces valeurs en fonction de la vitesse des points du joueur. Et si nous faisons défiler vers le haut, nous trouverons probablement ce joueur à cette vitesse, oui, un joueur dont la vitesse est très faible. Il n'y en a que cinq. Nous avons besoin de quelque chose de plus proche de 300. C'est une vitesse plus appropriée. Donc, si nous sauvegardons et courons maintenant, lorsque je me déplace, le joueur se déplace plus spécifiquement, le collisionneur se déplace. Et il correspond à n'importe quel joueur à x et au joueur que Yest. Donc, notre personnage joueur se déplace avec lui. Et avec ce changement, vous ne devriez pas remarquer de différence avec la façon dont le joueur se sent à contrôler. Maintenant, la prochaine étape consiste à placer des murs avec lesquels le joueur peut entrer en collision. Depuis maintenant, je peux simplement marcher à travers ces arbres, les bâtiments et autres choses. Mettons un collisionneur très simple à démontrer. Au bas de notre fonction de chargement par points aimée, je vais installer un nouveau collisionneur mural. Je l'appellerai le mur local égal au deux-points du monde, nouveau collisionneur de rectangle. Whoops, nouveau collisionneur rectangle, pas un rectangle BSG. Ainsi, avec ce nouveau collisionneur rectangle, nous devons lui donner une position sortie à la position cent, deux cents. Et puis, pour une largeur, je ne sais pas, je ferai une largeur de 120, puis une hauteur de 300. Donc, avec cela en place, nous devrions voir que si nous sauvegardons et courons là, c'est ce grand rectangle ici est notre mur. Mais vous remarquerez que lorsque nous entrons dedans, le mur tombe un peu. J'espère que vous serez en mesure de voir qu'il s'est en quelque sorte estompé, mais le mur tombe parce que nos deux collisionneurs sont dynamiques. Au lieu de cela, nous avons besoin de notre type de jeu de deux-points de mur statique. état statique signifie qu'il n'est pas touché par les collisions et qu'il ne s'éloignera pas. Donc, si nous sauvegardons et courons maintenant, lorsque je tombe sur le mur, le mur reste en place et le personnage s'est également arrêté lorsque nous y entrons. En passant, en regardant de plus près, il semble que la bordure de notre collisionneur ne correspond pas exactement au sprite du joueur. Si vous le souhaitez, vous pouvez augmenter la largeur pour être plus précis. Mais à mon avis, il suffit d'être assez proche. Quoi qu'il en soit, notre mur fonctionne et ça arrête le joueur. Ce que nous voulons faire maintenant, c'est faire en sorte que nous puissions générer ces murs à partir de carrelage. Et gardez à l'esprit que cela nécessite que vous ayez implémentation tuilée simple configurée pour votre projet. Alors allez-y et jetez un coup d'œil à cette vidéo dans le coin pour vous mettre au courant. Tellement impliqué pour notre carte, nous allons commencer par créer une nouvelle couche d'objets. Et nous allons appeler ça des murs. Maintenant que cette couche de murs est créée et que nous l'avons sélectionnée, nous pouvons utiliser ces outils ici pour les objets. Je vais donc cliquer sur cet outil rectangle, et je vais dessiner des objets au-dessus des endroits où je veux qu'il y ait un mur. J'ai donc dessiné deux objets. Et si vous utilisez ce sélecteur violet ici, vous pouvez les modifier, vous pouvez les déplacer et modifier leur taille. Mais j'ai deux objets dessinés. Un autre conseil s'il ne s' accroche pas à la grille comme c'est le cas pour moi, vous pouvez passer à View snapping, puis choisir votre option ici pour l'accrocher si vous avez besoin de le rendre plus précis ou de le rendre plus précis. s'accrocher à la grille. Donc, avec ces deux objets dessinés, je vais sauvegarder la carte. Mais passez également à l'exportation de fichiers en tant que. Ensuite, assurez-vous de l'exporter au bon endroit. Dans mon cas, c'est dans mon dossier de jeu , dans les cartes, puis c'est cette carte de test. Je vais économiser par-dessus tout ça. Et cela fait que notre carte est exportée. Chaque fois que vous apportez des modifications à votre carte, vous devez vous assurer d'enregistrer et d'exporter, sinon ces modifications n'apparaîtront pas dans le jeu. Nous devons maintenant créer des collisionneurs qui correspondent aux objets que nous avons dessinés pour mosaïque. Nous allons donc faire quelques choses pour ça. La première chose que je vais faire est de créer une table WALS. Cela va donc contenir tous les objets muraux que nous créons. Ensuite, nous avons besoin d'une déclaration si. Nous allons dire si le jeu cartographie couches avec des crochets et dire des murs. Donc, ce que fait cette instruction if, c'est vérifier que nous avons une couche appelée Walls. Sinon, nous ne ferons rien d'autre. Donc, si nous avons une couche de carte de jeu appelée Walls , nous allons parcourir tous les objets de cette couche. Et nous le faisons avec une boucle for. Nous dirons pour i virgule par paires. Et ensuite, entre parenthèses, nous spécifions ici la carte de jeu qui couche. Même chose qu'avant, les murs. Mais nous disons ensuite des objets à points. Ainsi, nous obtenons tous les objets de la couche des murs. Ensuite, nous disons « faire et finir ». À l'intérieur de cette boucle for-loop, nous allons réellement générer nos objets muraux. Et nous pouvons réellement prendre ce code ici et l'utiliser. Nous allons donc coller ça ici et le formater un peu. Maintenant. En ce moment, nous codons ces éléments en dur comme des paramètres de cent deux cents. Mais au contraire, ce que nous voulons faire, c'est prendre l'objet ici même du mosaïque et utiliser ces valeurs pour ces valeurs. Je vais donc dire obj dot x et obj dot y pour les valeurs x et y. Et la même chose avec la largeur et la hauteur. Largeur et hauteur des points de travail. Et sauvegardez ça. Donc, quel que soit le mur que nous créons, il s'agit de prendre ces valeurs directement de l'objet que nous avons dessiné en mosaïque. Et une dernière chose que nous voulons insérer cet objet mural que nous venons créer dans notre table murale. Je vais donc dire table, insérer des murs, mur, ce qui met notre objet mural dans les murs. Cela nous aide à garder une trace de tout ce que nous créons. Juste pour clarifier pourquoi cela fonctionne, si je sélectionne l'un de ces objets que nous avons créés, nous pouvons voir qu'il possède une propriété x, y , width et height, que nous pouvons voir ici à gauche. Et voilà les propriétés exactes auxquelles nous accédons lorsque nous créons ce mur. Allons de l'avant et économisons et courons. Et on peut voir le contour blanc. Mais quand je rentre dans ces maisons ici où j'ai dessiné ces objets, nous ne pouvons plus les traverser. Et c'est la même chose avec celle-ci ici. Partout où nous avons dessiné un objet en mosaïque, il y a maintenant une loi reste là et que nous ne pouvons plus traverser. Et une fois que vous dessinez le reste des objets en mosaïque, nous n'avons plus à dessiner le monde car tout est précis au niveau lui-même. Donc, si nous supprimons cela, nous ne verrons plus les collisionneurs, qui est exactement ce que nous voulons. Si nous sauvegardons et courons maintenant, tout revient à la normale, mais le joueur a une boîte de frappe et chacun de ces murs ne peut plus faire l'objet d'un passage. Donc, tout semble être en place. Et ça couvre tout. Nous disposons maintenant d'une base très solide pour un jeu de type RPG. 10. Récapitulé: Cela complète le contenu principal de cette classe. Comme toutes les classes Skillshare, il est possible de soumettre un projet de classe. Je veux vraiment que tous ceux qui suivent ce cours soient aussi créatifs que possible. Le projet de classe est donc simplement de faire tout ce que vous aimez en amour. Cela peut inclure l'ajout de quelque chose de nouveau au jeu que nous avons créé dans les vidéos ou le démarrage de quelque chose de nouveau. Quoi que vous fassiez, je vous encourage vivement à garder les choses simples au début, puis à construire des choses plus compliquées. Mon premier jeu avec amour était un clone Breakout très basique. Et chaque partie après cela, fondée sur la complexité, c'est un excellent moyen d'apprendre et de s'entraîner, et j'encourage toujours mes élèves à faire de même. en soit, travailler seul peut être difficile. Il y a donc quelques conseils que j'aimerais partager. La première consiste à utiliser le wiki love 2D. Ce site présente tout ce dont vous pourriez avoir besoin sur Love 2D et toutes ses fonctionnalités. Toutes les fonctions et capacités sont décrites en détail ici. Et le trouver est assez facile. Par exemple, si j'ai oublié les paramètres pour le dessin de points démographiques amoureux, je peux simplement Google en ligne pour l'amour 2D, adoré nos graphiques que je dessine. Et la page du wiki apparaîtra directement. Je vérifie constamment des choses sur ce site chaque fois que je travaille sur mes propres jeux. Ensuite, si vous avez des questions spécifiques sur quoi que ce soit, n' oubliez pas de consulter les forums Love 2D. La communauté ici est très active et les gens sont toujours prêts à aider si vous êtes coincé sur quelque chose. Une autre chose utile est de trouver des projets d'amour open source en ligne et d'examiner comment ils ont codé certaines fonctionnalités pour vous aider à démarrer. J'ai une excellente ressource sur ma page GitHub, qui est un jeu d'amour 2D open source complet. Vous pouvez le télécharger et l'exécuter localement pour jouer. Ensuite, tout le code source est disponible pour que vous puissiez parcourir, apprendre et utiliser directement pour vos propres jeux. Alors que vous travaillez sur quelque chose avec amour, allez certainement dans l'onglet Projets et ressources et cliquez sur le bouton Créer un projet, téléchargez des captures d'écran et décrivez ce sur quoi vous travaillez. Je suis très excité de voir quel genre de choses les gens trouvent. Encore une fois, essayez de rester simple au début et de progresser vers le haut. Commencer facilement est la clé pour se mettre à l'aise avec cela. Et je dirais que nous allons conclure ce cours. Merci beaucoup d'avoir parcouru ce matériel. Si vous ne l'avez pas déjà fait, veuillez laisser un avis et si vous avez apprécié le cours, merci de le recommander. J'apprécie grandement le soutien apporté ici. N'hésitez pas à me contacter pour toute question de Lua, d' amour ou de programmation générale. Je suis toujours prêt à aider comme je peux avec tout ce qui est dit, je crois que cela couvre tout. Merci encore d'avoir suivi mon cours et j'ai hâte de vous voir dans le prochain.