Avanceret japansk skærm ved hjælp af brugerdefinerede indholdsprocessorer
Om japansk skærm
Teksttegning i MonoGame bruger SpriteFont samt XNA. Se Vise alfanumeriske tegn og oplysninger om typografi for SpriteFont, da det er det samme som XNA. フォントスタイルの詳細
Hvis du bruger SpriteFont, skal du angive de tegn, du vil bruge på forhånd. Hvis det kun er alfanumeriske symboler, kan det gøres med næsten ingen omkostninger som tegnspecifikation og byggetid, fordi det er omkring 100 tegn, men når det kommer til japansk, bliver det tusindvis af tegn, så byggetiden bliver ekstremt lang. Hvis du kun angiver de tegn, der skal bruges, kan buildtiden forkortes til en vis grad, men det er besværligt at angive det tegn, der skal bruges i omvendt rækkefølge, og det bliver endnu mere besværligt, hvis der sker en ændring i det tegn, der skal bruges.
Som svar på dette problem, "Ninari GD"site er blevet tilpasset til at gøre Tegning japansk i XNA mere glat (ved den måde, site-run Yuichi Ito - MSFT er en af de XNA Framework udviklere). Det gør det nemmere at angive de tegn, der skal bruges, forkorte buildtiden, dekorere tegn og meget mere. For mere information, se venligst linket.
Men den "WPF font processor" præsenteret på siden er for XNA og kan ikke bruges som det er i MonoGame. Så jeg vil gerne portere dette til MonoGame.
Hent WPF-skrifttypeprocessoren
Åbn følgende websteder:
Rul ned til to links, og klik på linket ovenfor for at hente det projekt, der indeholder sorteringskoden. Den nederste er kun en DLL, så du behøver ikke at downloade den.
Udpak den hentede fil, så du kan hente indholdet.
Oprette et WPF-skrifttypeprojekt
Jeg vil gerne oprette en WPF font processor DLL, der arbejder med "Enhver CPU", men en eller anden grund, når jeg opretter et projekt med "Content Pipeline Extension Library" af XNA Framework, kan jeg kun oprette det i x86, så jeg vil oprette det fra en almindelig klasse bibliotek her.
Når du opretter et projekt, behøver du ikke "Class1.cs", så slet det.
Tilføj derefter en reference.
Da du tegner tekst i WPF, skal du bruge en WPF-relateret reference. Først skal du kontrollere "PresentationCore" fra "Framework".
Kontroller derefter "WindowsBase". Tryk nu på knappen OK for at bekræfte og åbne Referencestyring igen.
Vælg Gennemse til venstre, og klik på knappen Gennemse nedenfor.
Åbn følgende mappesti:
- C:\Programmer(x86)\MSBuild\MonoGame\v3.0\Tools\
Derfra skal du tilføje følgende to DLL'er:
- MonoGame.Framework.dll
- MonoGame.Framework.Content.Pipeline.dll
Sørg for, at den er markeret, og klik på knappen OK.
Gennemse de referencer, der er tilføjet.
Tilføj kildekoden fra mappen "WpfFontPipeline" fra det projekt, du har hentet, til det projekt, du redigerer i øjeblikket.
Den tilstand, du har tilføjet.
Kontroller, at buildkonfigurationen er "Release" og "Any CPU".
Udfør en build for at se, om den blev bygget.
DLL er oprettet.
Oprette et spilprojekt
Opret et projekt til MonoGame. Det er ligegyldigt, hvilken platform det er.
Placer den DLL-fil, du lige har oprettet, i mappen Indhold. Det er ligegyldigt, hvor DLL er, men i så fald skal du bruge en relativ eller absolut vej, så jeg vil lade det være her for nu.
Åbn Content.mgcb, og åbn Referencer med indhold markeret.
Hvis du dobbeltklikker på "Content.mmcb" for ikke at åbne den, skal du starte "MonoGame Pipeline" i menuen Start.
Skriv filnavnet på den DLL, du lige har oprettet, eller stien i forhold til eller den absolutte sti fra Content.mgcb i tekstboksen.
Når du har konfigureret den, reflekterer DLL'en stadig ikke, så når du har gemt projektet, skal du afslutte monoGame Pipeline og åbne den igen.
Opretter en sprite-skrifttype. Vælg "Rediger" "Tilføj→Nyt element i menuen.
Vælg "SpriteFont Beskrivelse" blandt de elementer, der skal tilføjes. (I øvrigt, efter at have tilføjet SpriteFont, åbnede jeg SpriteFont-filen for at gøre det lettere at se på kørselstid og ændrede skrifttypenavnet og -størrelsen.)
Hvis du vælger den SpriteFont, du har tilføjet, vil du se, at WPF-skrifttypeprocessoren er tilgængelig fra processoren.
Da hver parameter kan indstilles, denne gang forsøgte jeg at sætte den som vist i figuren for tiden. Desværre kan du ikke ændre farven i den aktuelle version af MonoGame Pipeline.
Prøv at bygge. 6860 tegn blev bygget, fordi det omfattede op til JIS niveau 2. Alligevel er tiden omkring ni sekunder, så du kan se, at det er ret hurtigt.
Nu tegner vi ved hjælp af denne SpriteFont, og koden er nøjagtig den samme som XNA. Du kan tegne tekst ved hjælp af koden indført i "Vis alfanumeriske tegn", som det er. Selvfølgelig er japansk også muligt.
Jeg vil gerne sætte kun den kode, som jeg har tilføjet én gang.
Definitionen del af feltet. "SpriteFont" er blevet tilføjet.
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
SpriteFont font;
Indlæser og opretter skrifttypedata i metoden LoadContent.
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");
}
Tegning med japansk i metoden Draw.
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);
}
Når teksten udføres, tegnes den. Det er lidt svært at forstå, men bogstaverne har grænser og blå overgange indeni.
Det blev nemt at tegne japansk som dette, og det blev muligt at tegne karakter med udsmykningen.
Endelig kan du ikke ændre farven på tekstdekorationen på monoGame Pipeline, men du kan åbne filen direkte og ændre den.
Når du har gemt og lukket projektet, skal du åbne .mccb-filen som en tekstfil.
Hvis du ruller ned, er der farveoplysninger i målparameteren, så rediger dem direkte der.
Når du har gemt teksten, skal du åbne monoGame Pipeline igen og bygge den. Du kan se, at farven er ændret, når du kører den.