اطلاعات بیشتر در مورد سبک های فونت
خلاصه
جزئیات فایل فونت sprite و کاراکترهایی که نمایش داده می شوند را توصیف می کند.
محیط عملیاتی
پیش نیازها
نسخه های XNA پشتیبانی شده |
|
پلتفرم های پشتیبانی شده |
|
نسخه Vertex Shader مورد نیاز ویندوز | 2.0 |
ویندوز نسخه Pixel Shader مورد نیاز است | 2.0 |
محیط عملیاتی
بستر |
|
ماده
در یک فایل فونت sprite، هفت مورد زیر را می توان مشخص کرد.
- نام قلم
- اندازه قلم
- عرض بین کاراکترها
- با یا بدون کرنینگ
- سبک فونت
- کاراکترهای پیش فرض
- رمزگذاری کاراکتر ایجاد می شود
در اینجا از فونت زیر به عنوان فونت پیش فرض استفاده می شود. (اندازه حروف نیز وجود دارد، بنابراین من از زمانی که فونت sprite ایجاد شد، کمی با آن سر و کار داشته ام.)
نام قلم | Segoe UI مونو |
اندازه | 24 |
فضای | 0 |
کرنینگ | واقعی |
سبک | منظم |
نام قلم
<FontName>MS 明朝</FontName>
می توانید نام فونت را مشخص کنید. فونت هایی که می توانند مشخص شوند، فونت هایی هستند که در محیط توسعه نصب می شوند. از آنجایی که تصویر فونت در زمان ساخت تولید می شود، حتی در محیطی که فونت ایجاد شده نصب نشده است، می توان از آن بدون مشکل استفاده کرد. متن زیر به صورت "MS Mincho" نمایش داده می شود.
نام قلم | خانم مینچو |
اندازه | 24 |
فضای | 0 |
کرنینگ | واقعی |
سبک | منظم |
اندازه
<Size>36</Size>
اندازه متن. اندازه روی صفحه خواهد بود و همچنین می توانید یک رقم اعشار را مشخص کنید. (به طور دقیق، اندازه بافر پشتی خواهد بود)
نام قلم | Segoe UI مونو |
اندازه | 36 |
فضای | 0 |
کرنینگ | واقعی |
سبک | منظم |
فاصله بین کاراکترها
<Spacing>12</Spacing>
می توانید عرض بین هر کاراکتر را مشخص کنید. شماره اندازه روی صفحه خواهد بود. (به طور دقیق، اندازه بافر پشتی خواهد بود)
نام قلم | Segoe UI مونو |
اندازه | 24 |
فضای | 12 |
کرنینگ | واقعی |
سبک | منظم |
کرنینگ
<UseKerning>false</UseKerning>
فاصله حروف را متعادل کنید. برای اطلاعات بیشتر به لینک زیر مراجعه کنید.
به طور پیش فرض، این درست است، به این معنی که فاصله بین کاراکترها به طور خودکار تنظیم می شود تا دیدن فضای بین کاراکترها آسان تر شود. اگر روی false تنظیم شود، فاصله بین کاراکترها تنظیم نمی شود و گیر کرده به نظر می رسد.
نام قلم | Segoe UI مونو |
اندازه | 24 |
فضای | 0 |
کرنینگ | نادرست |
سبک | منظم |
سبک
<Style>Bold</Style>
می توانید حروف را پررنگ یا مورب کنید. پارامترهایی که می توانند مشخص شوند عبارتند از: "Regular"، "Bold" و "Italic". اگر می خواهید بیش از یک مورد را مشخص کنید، آنها را با کاما (،) جدا کنید.
نام قلم | Segoe UI مونو |
اندازه | 24 |
فضای | 0 |
کرنینگ | واقعی |
سبک | پررنگ و ایتالیک |
کاراکترهای پیش فرض
<DefaultCharacter>◆</DefaultCharacter>
در فونت های sprite، می توانید رمزگذاری کاراکتری را که می تواند در "CharacterRegions" استفاده شود، مشخص کنید، اما اگر بخواهید کاراکترهای دیگر را نمایش دهید، یک استثنا در زمان اجرا در چارچوب XNA (تا 3.1) رخ می دهد.
با این حال، اگر این "DefaultCharacter" را مشخص کنید، می توانید آن را به عنوان یک کاراکتر جایگزین نمایش دهید، حتی اگر یک کاراکتر غیرمنتظره وارد شده باشد. من فکر می کنم به ویژه برای متن ورودی کاربر موثر خواهد بود.
در مثال نمایش زیر ، برنامه در تلاش است تا ""Default Character" را نمایش دهد ، اما از آنجا که این فونت sprite فقط به نمادهای الفبایی اجازه می دهد ، با "◆" مشخص شده در DefaultCharacter جایگزین می شود.
به هر حال، فقط یک کاراکتر یونیکد را می توان در اینجا مشخص کرد و کاراکترهایی که در CharacterRegions مشخص نشده اند نیز می توانند مشخص شوند.
رمزگذاری کاراکتر
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
</CharacterRegions>
کاراکترهایی را که می توانند در یک کد تعریف شده در یونیکد نمایش داده شوند مشخص می کند. می توان از کاراکترهای بین کدهای مشخص شده توسط "شروع" و "پایان" استفاده کرد.
اگر عدد زیادی را مشخص کنید، می توانید از کاراکترهایی مانند ژاپنی استفاده کنید، اما مراقب باشید زیرا ساخت آن زمان زیادی می برد و اندازه فایل تصویر فونت تمام شده بسیار بزرگ می شود.
از آنجایی که چندین گره "CharacterRegion" را می توان تعریف کرد، زمانی که می خواهید کد کاراکتر را با پرش مشخص کنید، می توان از آن استفاده کرد.
جداول یونیکد (32~127)
(اعداد در ردیف ها ×16 + اعداد در ستون) کد خواهد بود.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
2 | ! | " | # | $ | % | و | ' | ( | ) | * | + | , | - | . | / | ||
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | |
4 | @ | A | B | C | D | E | F | G | H | من | J | K | L | M | N | O | |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | |
6 | ` | a | b | c | d | e | f | g | h | من | j | k | l | m | n | o | |
7 | p | q | r | s | t | u | v | w | x | y | z | { | } | ~ | |
همه کدها
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif
namespace FontStyle
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
デフォルトフォント
</summary>
private SpriteFont defaultFont = null;
<summary>
フォント名変更フォント
</summary>
private SpriteFont fontNameFont = null;
<summary>
サイズ変更フォント
</summary>
private SpriteFont sizeFont = null;
<summary>
文字間変更フォント
</summary>
private SpriteFont spacingFont = null;
<summary>
太字フォント
</summary>
private SpriteFont boldFont = null;
<summary>
イタリックフォント
</summary>
private SpriteFont italicFont = null;
<summary>
カーニングOFFフォント
</summary>
private SpriteFont kerningOffFont = null;
<summary>
デフォルト文字フォント
</summary>
private SpriteFont defaultCharacterFont = null;
<summary>
GameMain コンストラクタ
</summary>
public GameMain()
{
// グラフィックデバイス管理クラスの作成
this.graphics = new GraphicsDeviceManager(this);
// ゲームコンテンツのルートディレクトリを設定
this.Content.RootDirectory = "Content";
#if WINDOWS_PHONE
// Windows Phone のデフォルトのフレームレートは 30 FPS
this.TargetElapsedTime = TimeSpan.FromTicks(333333);
// バックバッファサイズの設定
this.graphics.PreferredBackBufferWidth = 480;
this.graphics.PreferredBackBufferHeight = 800;
// フルスクリーン表示
this.graphics.IsFullScreen = true;
#endif
}
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// TODO: ここに初期化ロジックを書いてください
// コンポーネントの初期化などを行います
base.Initialize();
}
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// フォントをコンテンツパイプラインから読み込む
this.defaultFont = this.Content.Load<SpriteFont>("Default");
this.fontNameFont = this.Content.Load<SpriteFont>("FontName");
this.sizeFont = this.Content.Load<SpriteFont>("Size");
this.spacingFont = this.Content.Load<SpriteFont>("Spacing");
this.boldFont = this.Content.Load<SpriteFont>("Bold");
this.italicFont = this.Content.Load<SpriteFont>("Italic");
this.kerningOffFont = this.Content.Load<SpriteFont>("KerningOff");
this.defaultCharacterFont = this.Content.Load<SpriteFont>("DefaultCharacter");
}
<summary>
ゲームが終了するときに一回だけ呼ばれ
すべてのゲームコンテンツをアンロードします
</summary>
protected override void UnloadContent()
{
// TODO: ContentManager で管理されていないコンテンツを
// ここでアンロードしてください
}
<summary>
描画以外のデータ更新等の処理を行うメソッド
主に入力処理、衝突判定などの物理計算、オーディオの再生など
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Update(GameTime gameTime)
{
// Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
// ゲームを終了させます
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
{
this.Exit();
}
// TODO: ここに更新処理を記述してください
// 登録された GameComponent を更新する
base.Update(gameTime);
}
<summary>
描画処理を行うメソッド
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Draw(GameTime gameTime)
{
// 画面を指定した色でクリアします
this.GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
this.spriteBatch.Begin();
// デフォルト
this.spriteBatch.DrawString(this.defaultFont, "Sample Text -Default-",
new Vector2(20.0f, 20.0f), Color.White);
// カーニング OFF
this.spriteBatch.DrawString(this.kerningOffFont, "Sample Text -Kerning OFF-",
new Vector2(20.0f, 70.0f), Color.White);
// フォント名
this.spriteBatch.DrawString(this.fontNameFont, "Sample Text -FontName-",
new Vector2(20.0f, 120.0f), Color.White);
// フォントサイズ
this.spriteBatch.DrawString(this.sizeFont, "Sample Text -Size-",
new Vector2(20.0f, 170.0f), Color.White);
// 文字間
this.spriteBatch.DrawString(this.spacingFont, "Sample Text -Spacing-",
new Vector2(20.0f, 220.0f), Color.White);
// 太字
this.spriteBatch.DrawString(this.boldFont, "Sample Text -Bold-",
new Vector2(20.0f, 270.0f), Color.White);
// イタリック
this.spriteBatch.DrawString(this.italicFont, "Sample Text -Italic-",
new Vector2(20.0f, 320.0f), Color.White);
// デフォルト文字
this.spriteBatch.DrawString(this.defaultCharacterFont, "Sample Text -デフォルト文字-",
new Vector2(20.0f, 370.0f), Color.White);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}