Mon concepteur d'interface utilisateur a fait un joli PSD Photoshop de l'interface utilisateur et tout joli. Le plus gros problème que j'ai est de convertir certaines des polices les plus élégantes utilisées en quelque chose de rendable dans le jeu. Existe-t-il un moyen de convertir ces styles de police dans Photoshop en une police bitmap quelconque?
J'ai besoin de pouvoir rendre du texte comme celui-ci dans mon code:
Réponses:
D'accord, vous devrez me pardonner de ne pas vous avoir donné de code XNA spécifique, car je ne connais pas cette plate-forme, mais ce que je vais vous dire devrait fonctionner sur n'importe quel moteur de jeu qui vous permet de dessiner des sprites.
Les polices ne sont pas votre seul problème, je vais donc vous donner un conseil, puis je vais répondre à votre question. Avec ces deux choses, vous devriez être en mesure de faire une relation amoureuse-colombe avec votre concepteur d'interface graphique, et vous pourrez tous deux créer des jeux très heureux.
La première chose est que vous allez vous asseoir avec votre designer, et vous allez lui demander de vous donner deux ensembles de fichiers. Le premier est un ensemble de fichiers transparents qui composent votre interface graphique (de manière optimale au format PSD ou DXT). Pour chaque bouton, étiquette fixe, arrière-plan, bordure et zone de texte, vous obtiendrez un fichier (vous pouvez également faire un atlas de texture, mais je vous recommande de le faire après avoir assemblé votre interface graphique, puis d'ajuster vos coordonnées source lors du blitting). Le texte non statique doit être omis à ce stade (je reviendrai sur ce point plus tard).
La deuxième chose que vous obtiendrez est la conception graphique réelle, cette fois au format Photoshop. Pour ce fichier, vous allez demander à votre concepteur de réaliser l'intégralité de la conception de l'interface graphique, en utilisant uniquement les fichiers qu'elle vous a précédemment fournis.
Elle va ensuite mettre chaque élément GUI dans une couche distincte, sans aucun effet. Vous allez lui dire de faire ce pixel parfait, car les endroits où elle va tout mettre, c'est où tout sera réellement dans le jeu finalisé.
Une fois que vous obtenez cela, pour chaque couche, vous allez appuyer sur Ctrl-T, et dans le volet Info (F8), vous prendrez note des coordonnées X et Y pour chaque élément. Assurez-vous que vos unités sont définies en pixels (Préférences-> Unités et règles-> Unités). Ce sont les positions que vous allez utiliser pour dessiner vos sprites.
Maintenant, pour les polices, comme vous le savez clairement maintenant, vous ne pourrez pas obtenir que vos polices aient exactement le même aspect que vous les voyez dans Photoshop à l'aide des API de rendu de texte. Vous devrez pré-rendre vos glyphes, puis assembler par programme vos textes. Il existe de nombreuses façons de procéder, et je mentionnerai celle que j'utilise.
La première chose à faire est de rendre tous vos glyphes dans un ou plusieurs fichiers. Si vous ne vous souciez que de l'anglais, une seule texture pour tous les glyphes suffira, mais si vous voulez avoir un jeu de caractères plus étendu, vous pouvez utiliser plusieurs fichiers. Assurez-vous simplement que tous les glyphes que vous voulez sont disponibles sur la police choisie par votre designer.
Ainsi, pour rendre les glyphes, vous pouvez utiliser les fonctionnalités de
System.Drawing
pour obtenir les mesures de police et dessiner vos glyphes:Avec cela, vous avez dessiné des glyphes blancs sur un fond transparent sur un tas de fichiers PNG et créé un fichier d'index qui vous indique pour chaque point de code, dans quel fichier se trouve le glyphe, son emplacement et ses dimensions. Notez que j'ai également mis deux pixels supplémentaires pour séparer chaque glyphe (pour accueillir d'autres effets)
Maintenant, pour chacun de ces fichiers, vous le mettez dans photoshop et effectuez tous les filtres que vous souhaitez. Vous pouvez définir les couleurs, les bordures, les ombres, les contours et tout ce que vous voulez. Assurez-vous simplement que les effets ne font pas chevaucher les glyphes. Si c'est le cas, ajustez l'espacement, restituez, rincez et répétez. Enregistrez au format PNG ou DXT, et avec le fichier d'index, mettez tout dans votre projet.
Le texte de dessin doit être très simple. Pour chaque caractère que vous souhaitez imprimer, recherchez son emplacement à l'aide de l'index, dessinez-le, avancez la position et répétez. Vous pouvez également ajuster l'espacement, le crénage (délicat), l'espacement vertical et même la coloration. À lua:
Et voilà. Répétez l'opération pour toutes les autres polices (et la taille optimale également)
Edit : j'ai changé le code à utiliser
Graphics.MeasureString
au lieu deTextRenderer.MeasureText()
car ils utilisent tous deux des systèmes de mesure différents, et peut entraîner des incohérences entre le glyphe mesuré et celui dessiné, en particulier avec les glyphes en surplomb trouvés dans certaines polices. Plus d'informations ici .la source
Eh bien, comme quelqu'un l'a dit, dans XNA, spritefont fait le gros du travail pour vous. sur le site Web du club des créateurs, il existe un exportateur de polices bitmap qui exporte en images de polices de style XNA. ( http://xbox.create.msdn.com/en-US/education/catalog/utility/bitmap_font_maker ) Ensuite, vous pouvez l'ouvrir dans photoshop ou autre et le rendre joli. À partir de là, vous ajoutez la texture à votre projet de contenu et, dans le type de contenu, sélectionnez la texture de la police d'image-objet. Dans votre code, vous le chargez comme une police sprite normale
(Exemple: http://www.youtube.com/watch?v=SynGWrWYUQI )
la source
La solution est assez simple et est utilisée par un grand nombre de jeux. Tout ce que vous avez à faire est de traiter vos polices comme s'il s'agissait de sprites.
Demandez à votre concepteur de dessiner toute la gamme de chiffres et de lettres que vous souhaitez utiliser dans votre jeu. Rendez-les ensuite dans des images statiques de tailles variables (.png, .bmp, quel que soit le format que vous utilisez). Vous aurez quelque chose comme ça:
Maintenant, tout ce que vous avez à faire est de rendre chaque lettre de votre "feuille de police" comme si c'était un sprite à l'écran. Cela aide certainement à construire une classe d'aide pour traduire entre les chaînes et les sprites.
Ma mise en œuvre est plus complexe, mais pratique. La feuille de polices est construite comme l'image ci-dessus avec plusieurs polices dans un seul fichier .png. J'ai un
.ini
fichier qui mappe la lettre de chaque police à une position sur la feuille, ainsi que sa largeur et sa hauteur. Cela permet à mon concepteur (et moi-même) de devenir fou en créant des polices sympas sans avoir à toucher à aucun code. Lorsque je dessine une chaîne à l'écran, j'ai une méthode qui recherche la police et lechar
fichier .ini pour obtenir la position et les limites de la lettre à partir de la feuille de police, puis je dessine simplement leTexture2D
avec enSpriteBatch.Draw()
utilisant la sourceRectangle
de la lettre Dans la question.la source
L'interface utilisateur est un sujet vaste et complexe. Le rendu des polices est une partie difficile. Je vous conseille d'utiliser une bibliothèque déjà existante qui vous permet d'afficher du contenu Flash ou HTML dans le jeu, au lieu de tout refaire vous-même.
Awesomium semble prometteur et devrait fonctionner avec XNA , vous pouvez donc l'essayer. Il est gratuit pour les jeux non commerciaux, ou si vous ne gagnez pas des tonnes d'argent:
la source
Si vous recherchez des effets plus sophistiqués que l'importateur ordinaire .spritefont, vous pouvez essayer de rechercher un "générateur de polices bitmap".
Personnellement, je préfère celui-ci: http://www.ironstarmedia.co.uk/2010/01/free-game-dev-utility-fancy-bitmap-font-generator/
Quelques autres idées:
la source
XNA
fait tout le travail acharné pour vous. Avec,Spritefont
vous pouvez facilement convertir un fichier de police sur votre machine en le type de feuille de sprite que vous demandez en définissant un fichier XML.Une fois que vous avez ajouté le fichier XML à votre projet de contenu, chargez-le avec
ContentManager
:Voici un exemple de fichier .spritefont de mon projet de contenu:
la source
Je ne suis pas sûr car je ne l'ai jamais utilisé mais les gens m'ont suggéré d'utiliser Glyph Designer. Voici un tutoriel vidéo:
http://vimeo.com/32777161
Ici, il y a une discussion à ce sujet mentionnant Photoshop.
Il y a des gens qui utilisent également l' éditeur de polices Hiero .
Sur ce site Web, vous trouverez une liste d'autres éditeurs de polices que vous voudrez peut-être consulter.
Faites-moi savoir lequel vous convient le mieux :)
la source