Erweiterte japanische Anzeige mit benutzerdefinierten Inhaltsprozessoren
Über japanische Anzeige
Die Textzeichnung in MonoGame verwendet SpriteFont sowie XNA. Weitere Informationen finden Sie unter Anzeigen alphanumerischer Zeichen und Schriftstildetails, da es mit XNA identisch ist.
Wenn Sie SpriteFont verwenden, müssen Sie die Zeichen angeben, die Sie im Voraus verwenden möchten. Wenn es nur alphanumerische Symbole sind, kann es fast ohne Kosten als Zeichenspezifikation und Buildzeit durchgeführt werden, weil es etwa 100 Zeichen ist, aber wenn es um Japanisch geht, wird es Zutausende von Zeichen, so dass die Buildzeit extrem lang wird. Wenn Sie nur die zu verwendenden Zeichen angeben, kann die Buildzeit bis zu einem gewissen Grad verkürzt werden, aber es ist problematisch, das Zeichen anzugeben, das umgekehrt verwendet werden soll, und es wird noch problematischer, wenn sich das zu verwendende Zeichen ändert.
Als Reaktion auf dieses Problem wurde die "Ninari GD"-Websiteangepasst, um Drawing Japanese in XNA reibungsloser zu gestalten (übrigens ist der Standortbetrieb Yuichi Ito - MSFT einer der XNA Framework-Entwickler). Dies erleichtert das Angeben der zu verwendenden Zeichen, die Verkürzung der Buildzeit, das Dekorieren von Zeichen und vieles mehr. Weitere Informationen finden Sie unter dem Link.
Der auf der Seite dargestellte "WPF-Schriftartprozessor" ist jedoch für XNA und kann nicht wie in MonoGame verwendet werden. Also möchte ich dies auf MonoGame portieren.
WPF Font Processor herunterladen
Öffnen Sie die folgenden Websites:
Scrollen Sie nach unten zu zwei Links, und klicken Sie auf den Link oben, um das Projekt herunterzuladen, das den Sortiercode enthält. Die untere ist nur eine DLL, so dass Sie sie nicht herunterladen müssen.
Extrahieren Sie die heruntergeladene Datei, damit Sie den Inhalt abrufen können.
Erstellen eines WPF-Schriftartprozessorprojekts
Ich möchte eine WPF-Schriftartprozessor-DLL erstellen, die mit "Any CPU" funktioniert, aber aus irgendeinem Grund, wenn ich ein Projekt mit der "Content Pipeline Extension Library" des XNA Framework erstelle, kann ich es nur in x86 erstellen, also erstelle ich es hier aus einer regulären Klassenbibliothek.
Wenn Sie ein Projekt erstellen, benötigen Sie keine "Class1.cs", also löschen Sie es.
Fügen Sie als Nächstes einen Verweis hinzu.
Da Sie Text in WPF zeichnen, benötigen Sie eine WPF-bezogene Referenz. Überprüfen Sie zunächst "PresentationCore" von "Framework".
Überprüfen Sie als Nächstes "WindowsBase". Drücken Sie nun die Schaltfläche OK, um den Referenz-Manager zu bestätigen und erneut zu öffnen.
Wählen Sie Durchsuchen auf der linken Seite und klicken Sie auf die Schaltfläche Durchsuchen unten.
Öffnen Sie den folgenden Ordnerpfad:
- C:-Programmdateien(x86)
Fügen Sie von dort aus die folgenden zwei DLLs hinzu:
- MonoGame.Framework.dll
- MonoGame.Framework.Content.Pipeline.dll
Stellen Sie sicher, dass es aktiviert ist, und klicken Sie auf die Schaltfläche OK.
Überprüfen Sie die hinzugefügten Verweise.
Fügen Sie den Quellcode aus dem Ordner "WpfFontPipeline" aus dem Projekt hinzu, das Sie in das Projekt heruntergeladen haben, das Sie gerade bearbeiten.
Der Zustand, den Sie hinzugefügt haben.
Stellen Sie sicher, dass die Buildkonfiguration "Release" und "Any CPU" ist.
Führen Sie einen Build aus, um zu sehen, ob er erfolgreich erstellt wurde.
DLL wird erstellt.
Erstellen eines Spielprojekts
Erstellen Sie ein Projekt für MonoGame. Es spielt keine Rolle, um welche Plattform es sich handelt.
Platzieren Sie die DLL, die Sie gerade erstellt haben, im Ordner Inhalt. Es spielt keine Rolle, wo sich die DLL befindet, aber in diesem Fall benötigen Sie einen relativen oder absoluten Pfad, also lasse ich ihn vorerst hier.
Öffnen Sie Content.mgcb und öffnen Sie Referenzen mit ausgewählten Inhalten.
Wenn Sie auf "Content.mmcb" doppelklicken, um es nicht zu öffnen, starten Sie "MonoGame Pipeline" im Startmenü.
Geben Sie im Textfeld den Dateinamen der gerade erstellten DLL oder den Pfad relativ zu oder den absoluten Pfad aus Content.mgcb ein.
Nachdem Sie es eingerichtet haben, spiegelt die DLL immer noch nicht wider, also beenden Sie monoGame Pipeline, sobald Sie das Projekt gespeichert haben, und öffnen Sie es erneut.
Erstellt eine Sprite-Schriftart. Wählen Sie im Menü "Bearbeiten" >Hinzufügen von neuen Gegenständen aus.
Wählen Sie "SpriteFont Description" aus den Elementen, um sie hinzuzufügen. (Übrigens habe ich nach dem Hinzufügen von SpriteFont die SpriteFont-Datei geöffnet, um die Anzeige zur Laufzeit zu erleichtern, und den Schriftnamen und die Schriftgröße geändert.)
Wenn Sie die SpriteFont auswählen, die Sie hinzugefügt haben, sehen Sie, dass der WPF-Schriftartprozessor über den Prozessor verfügbar ist.
Da jeder Parameter eingestellt werden kann, habe ich dieses Mal versucht, ihn so einzustellen, wie in der Abbildung gezeigt. Leider können Sie die Farbe in der aktuellen Version von MonoGame Pipeline nicht ändern.
Versuchen Sie zu bauen. 6860 Zeichen wurden gebaut, weil sie bis zu JIS-Stufe 2 enthalten waren. Dennoch beträgt die Zeit etwa neun Sekunden, so dass Sie sehen können, dass es ziemlich schnell ist.
Jetzt zeichnen wir mit diesem SpriteFont, und der Code ist genau derselbe wie XNA. Sie können Text zeichnen, indem Sie den Code verwenden, der in "Alphanumerische Zeichen anzeigen" eingeführt wurde. Natürlich ist japanisch auch möglich.
Ich möchte nur den Code eingeben, den ich einmal hinzugefügt habe.
Der Definitionsteil des Felds. "SpriteFont" wurde hinzugefügt.
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
SpriteFont font;
Laden und Erstellen von Schriftartdaten in der LoadContent-Methode.
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
// フォントデータの読み込み
font = Content.Load<SpriteFont>("Font");
}
Zeichnen mit Japanisch in der Draw-Methode.
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin();
spriteBatch.DrawString(font, "真・簡単(かもしれない)日本語表示",
new Vector2(50, 50), Color.White);
spriteBatch.DrawString(font, @"・OpenTypeフォント対応
・処理速度の高速化
・JIS漢字追加機能
・文字装飾",
new Vector2(50, 150), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Bei der Ausführung wird der Text gezeichnet. Es ist ein wenig schwer zu verstehen, aber die Buchstaben haben Grenzen und blaue Abstufungen im Inneren.
Es wurde einfach, Japanisch wie diese zu zeichnen, und es wurde möglich, den Charakter mit der Dekoration zu zeichnen.
Schließlich können Sie die Farbe der Textdekoration in monoGame Pipeline nicht ändern, aber Sie können die Datei direkt öffnen und ändern.
Nachdem Sie das Projekt gespeichert und geschlossen haben, öffnen Sie die .mccb-Datei als Textdatei.
Wenn Sie nach unten scrollen, gibt es Farbinformationen im Zielparameter, also bearbeiten Sie sie bitte direkt dort.
Öffnen Sie nach dem Speichern des Textes monoGame Pipeline erneut, und erstellen Sie ihn. Sie können sehen, dass sich die Farbe geändert hat, wenn Sie sie ausführen.