Un loader sprite sheet pour utiliser Free Texture Packer avec Monogame
Lire dans une autre langue : English, Français
Il y a quatre classes principales :
SpriteFrame
represente une image à l'intérieur d'une spritesheetSpriteSheet
repressente un ensemble de SpriteFrameSpriteSheetLoader
sert à charger une spritesheet générée par Free Texture PackerSpriteRender
sert à afficher SpriteFrame
Les autres classes stockent des informations concernant une SpriteFrame :
Pivot
stocke le point pivot d'une imageRect
stocke la position (X,Y) d'une image à l'intérieur d'une spritesheet et sa taille (Largeur, Hauteur)Size
stocke la taille (Largeur, Hauteur) d'une image
Vous devez avoir Monogame instalé
Pour cet exemple, j'utilise Monogame 3.8.1.303
Vous devez aussi avoir Free Texture Packer instalé
Pour cet exemple, j'utilise Free Texture Packer 0.6.7
Vous avez deux possibilités de l'installer dans votre projet
-
Utiliser les sources Copiez simplement le dossier
FreeTexturePackerLoader
dans votre projet monogame -
L'obtenir par Nuget
dotnet add package FreeTexturePacker.Lib --version 1.0.0
-
Ouvrez Free Texture Packer
-
Ajoutez les images du sossier
Examples/images
-
Nommer la texture
chess
-
Selectionner le format
png
-
Cochez la case
Remove file ext
-
Pour le packer, utiliser
OptimalPacker
-
Décocher la case
Allow trim
-
Choisissez le format
custom
-
Cliquez sur le crayon juste à côté
-
Coller ce template d'export:
{ "name":"{{{config.imageName}}}", "frames":[ {{#rects}} { "filename":"{{{name}}}", "frame":{ "X":{{frame.x}}, "Y":{{frame.y}}, "Width":{{frame.w}}, "Height":{{frame.h}} }, "rotated":{{rotated}}, "trimmed":{{trimmed}}, "spriteSourceSize":{ "X":{{spriteSourceSize.x}}, "Y":{{spriteSourceSize.y}}, "Width":{{spriteSourceSize.w}}, "Height":{{spriteSourceSize.h}} }, "sourceSize":{ "Width":{{sourceSize.w}}, "Height":{{sourceSize.h}} }, "pivot":{ "X":0.5, "Y":0.5 } }{{^last}},{{/last}} {{/rects}} ], "meta":{ "app":"{{{appInfo.url}}}", "version":"{{{appInfo.version}}}", "image":"{{{config.imageName}}}", "format":"{{{config.format}}}", "size":{ "Width":{{config.imageWidth}}, "Height":{{config.imageHeight}} }, "scale":{{config.scale}} } }
-
Cochez la case
Allow trim
etAllow rotation
-
Ecrivez
json
comme extension -
Cliquez sur
Save
-
Cliquez sur
Export
-
Identifiez le dossier Content de votre projet Monogame et cliquer sur
Select Folder
Cela va générer deux fichiers : chess.json
et chess.png
.
Le premier contient des informations concernant la spritesheet telles que la position et la taille des images qui la constituent; le second fichier est la spritesheet.
-
Créez un projet Monogame pour desktop
-
Copiez le dossier
FreeTexturePackerLoader
dans votre projet -
Tout en haut du ficher Game1.cs, ajoutez
using FreeTexturePackerLoader;
-
Créez une instance du SpriteSheetLoader dans la méthode
LoadContent
var spriteSheetLoader = new SpriteSheetLoader(Content);
-
Créez une instance du SpriteRenderer
private SpriteRender spriteRender;
Dans la méthode
LoadContent
, ajoutez :spriteRender = new SpriteRender(_spriteBatch);
-
Chargez la spritesheet
private SpriteSheet spriteSheet;
Dans la méthode
LoadContent
, ajoutez :spriteSheet = spriteSheetLoader.Load("chess");
-
Afficher un sprite à partir de la spritesheet Dans la méthode
Draw
, ajoutez :spriteRender.Draw(spriteSheet.GetSprite("reine_blanc"), new Vector2(100, 100), Color.White);
Vous devrez voir l'image de la reine blance à l'écran.
-
Maintenant, essayez d'afficher toutes les pièces à l'écran
Vous trouverez le projet complet dans le dossier
Example/ChessBoard Final
Veuillez lire le fichier CODE_OF_CONDUCT.md concernant la conduite à tenir pour contribuer à ce projet.
- Sesso Kosga - Travail inital - senor16
Ce projet utilise la licence MIT - voir le fichier licence.md pour plus de détails