使用自訂內容處理器進行高級日語顯示
關於日語顯示。
在 MonoGame 中,文字繪製使用 SpriteFont,就像 XNA 一樣。 有關 SpriteFont 的資訊,請參閱顯示字母數位字元或瞭解有關字體樣式的詳細資訊,因為它與 XNA 相同。
在使用 SpriteFont 之前,必須指定要使用的字元。 字元指定和生成時間可以幾乎不花費任何成本,因為只有字母數位元號或大約100個字元,但成為數千個字元,當涉及到日語,生成時間變得非常長。 如果只指定使用的字元,則可以稍微縮短生成時間,但指定相反的字元可能更麻煩,如果字元發生更改,則更加困難。
為了解決這個問題,GD網站被自定義為使 XNA 的日語繪圖更流暢(順便說一下,網站營運的 Yuichi Ito - MSFT 是 XNA 框架開發人員之一)。 這簡化了指定使用的字元,並縮短了生成時間,並允許您修飾文本。 有關詳細資訊,請參閱連結。
但是,由於頁面前面的 WPF 字體處理器適用於 XNA,因此 MonoGame 不能按原樣使用它。 因此,我想把它移植到MonoGame。
下載 WPF 字體處理器。
開啟以下網站:
向下滾動時,有兩個連結,您可以單擊上面的連結下載包含排序代碼的專案。 底部只是 DLL,因此您不必下載它。
請展開下載的檔,以便檢索內容。
為 WPF 字體處理器創建專案。
我想創建 WPF 字體處理器 DLL,該 DLL 適用於"任意 CPU",但在這種情況下,在 XNA 框架的「內容管道擴展庫」中創建專案時,只能創建 x86,因此我將從常規類庫創建它。
建立項目後,請刪除"Class1.cs",因為它不。
然後添加引用。
由於在 WPF 中繪製文本,因此需要與 WPF 相關的引用。 首先,從"框架"到"演示核心"檢查。
然後檢查「WindowsBase」。 現在,按"確定"按鈕確認它,然後再次打開引用管理器。
選擇左側的"流覽",然後單擊下面的"流覽"按鈕。
開啟以下資料夾路徑:
- C:\程式檔 (x86)_MSBuild_MonoGame_v3.0_Tools_
從那裡,我們將添加兩個 DLL:
- MonoGame.Framework.dll。
- MonoGame.Framework.Content.Pipeline.dll。
確保選中,然後單擊"確定"按鈕。
查看添加的引用。
然後,從下載的專案中,將 WpfFontPipeline 資料夾中的原始程式碼添加到目前正在編輯的專案。
添加的狀態。
確保生成配置為"釋放"和"任意 CPU"
生成並驗證是否已成功生成。
確保已創建 DLL。
建立遊戲專案。
創建 MonoGame 專案。 平臺可以是任何內容。
將剛剛建立的 DLL 放在「內容」 資料夾中。 DLL 的位置並不重要,但在這種情況下,您需要相對或絕對路徑,因此我將暫時留在這裡。
打開內容.mgcb,並在選擇"內容"時打開"引用"。
• 如果雙擊"內容.mgcb"時未打開,請從"開始"菜單啟動"MonoGame Plipeline"。
在文字框中,鍵入剛剛創建的 DLL 的檔名,或相對於 Content.mgcb 的路徑或絕對路徑。
設置后,DLL 尚未反映,因此保存專案后,請關閉 MonoGame 管道,然後重新打開它。
創建子畫面字體。 從選單中選擇"編輯">"添加">"新建專案"。
從項目中選擇"SpriteFont 描述"以添加它。 (順便說一下,在添加 SpriteFont 後,我打開 SpriteFont 檔以更改字體名稱和大小,以便在運行時更易於查看。
如果選擇添加的 SpriteFont,您將看到處理器允許您選擇 WPF 字體處理器。
由於可以設置每個參數,因此這次我嘗試設置它們,如圖所示。 遺憾的是,當前版本的 MonoGame 管道不允許更改顏色。
嘗試生成。 6860 個字元已生成,包括 JIS 第二級。 然而,你可以看到,時間是大約9秒,所以速度相當快。
現在,我們使用此 SpriteFont 繪製它,但代碼與 XNA 完全相同。 您可以使用「顯示字母數位」 中介紹的代碼來繪製文本。 當然,我們也會說日語。
我想只列出我添加的代碼。
欄位定義部分。 添加了"SpriteFont"。
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
SpriteFont font;
在 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");
}
使用 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);
}
執行時,將繪製文本。 有點難以理解,但當文本具有邊框時,中間有藍色漸變。
像這樣,日語繪畫變得更容易,現在我可以畫裝飾字元。
最後,在 MonoGame 管道上更改文本修飾的顏色,但您可以直接打開和修改文件,從而瞭解如何執行此操作。
保存並關閉專案後,使用文本檔打開".mgcb"檔。
向下滾動時,目標參數具有顏色資訊,因此請直接編輯它。
保存文字后,再次打開並生成 MonoGame 管道。 當你運行它時,你會發現顏色變了。