Показване на буквено-цифрови знаци
резюме
Показване на произволен низ от знаци (буквено-цифров) на екрана.
Работна среда
Предпоставки
Поддържани версии на XNA |
|
Поддържани платформи |
|
Необходима версия на Vertex Shader за Windows | 2.0 |
Необходима версия на пикселния шейдър за Windows | 2.0 |
Работна среда
платформа |
|
вещество
За да покажете текст в XNA, имате нужда от файл, наречен "спрайт шрифт", който описва информацията за шрифта. Разширението е ". спрайтшрифт. Файловете със спрайтови шрифтове са написани в разширен формат на XML, така че могат лесно да бъдат пренаписани. За да създадете спрайтов шрифт, направете следното:
Щракнете с десния бутон върху проекта Съдържание и щракнете върху Добавяне → нов елемент.
Отваря се диалоговият прозорец Добавяне на нов елемент.
В инсталирания шаблон има елемент, наречен "Sprite Font", така че го изберете.
Посочете име на файл, но тук то се нарича "Font.spritefont". По принцип можете да зададете всяко име, което искате.
След като влезете, натиснете бутона "Добавяне" долу вдясно.
Когато създавате файл, файлът с шрифта на спрайта е отворен.
Той също е добавен към проекта за съдържание.
Съдържанието на шрифта на спрайта може да бъде оставено по подразбиране, но този път той е пренаписан по следния начин (коментарите също са японски за по-голяма яснота). Моля, вижте коментарите за обяснение на всеки възел.
Освен това подробно обяснение на спрайтовите шрифтове е обяснено в раздела "Подробности за стила на шрифта".
<?xml version="1.0" encoding="utf-8"?>
<!-- 文字の描画に使用するフォントの名前やサイズなどの情報を記述します。 -->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<!--
使用するフォント名。
-->
<FontName>メイリオ</FontName>
<!--
文字のサイズ。浮動小数点も可。単位はバックバッファ内でのピクセル単位。
-->
<Size>18</Size>
<!--
文字間の幅。単位はバックバッファ内でのピクセル単位。
-->
<Spacing>0</Spacing>
<!--
カーニングを使用するかどうか。
-->
<UseKerning>true</UseKerning>
<!--
文字スタイル。通常は"Regular"、太文字は"Bold", イタリックは"Italic"
"Bold, Italic"と記述することで複数のスタイルを指定可能。
-->
<Style>Regular</Style>
<!--
キャラクターリージョンで指定した文字次回の文字が描画されようとしたときに
代わりに表示する文字を指定します。ASCII 以外の Unicode 文字も可。
-->
<DefaultCharacter>*</DefaultCharacter>
<!--
キャラクターリージョン。使う文字の範囲をUnicodeで指定します。
32(ASCIIのスペース)から126('~')の英数字を指定しています。(10進数)
-->
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
След това ще опиша програмата за рисуване на текст.
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
スプライトでテキストを描画するためのフォント
</summary>
private SpriteFont font = null;
За да нарисуваме текст, използваме два класа: "SpriteBatch" и "SpriteFont". Текстът ще бъде нарисуван като спрайт.
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// フォントをコンテンツパイプラインから読み込む
this.font = this.Content.Load<SpriteFont>("Font");
}
В рамките на метода LoadGraphicsContent първо създайте клас SpriteBatch. Предайте GraphicsDevice като аргумент.
След това използвайте метода ContentManager.Load, за да заредите файла със спрайт шрифт, който току-що създадохте. Посочете класа "SpriteFont" за параметъра type и името на актива за аргумента. Ако не сте променили името на актива на шрифта на спрайта, посочете премахнатото разширение на името на файла.
За подробности относно зареждането на съдържание вижте "Зареждане на ресурси (съдържание)".
SpriteBatch
Конструктор
Създайте екземпляр на класа "SpriteBatch", който групира чертежа на спрайтове.
графикаУстройство | Графично устройство | Указва GraphicsDevice, което да се използва за рисуване. |
// スプライトの描画準備
this.spriteBatch.Begin();
// テキストをスプライトとして描画する
this.spriteBatch.DrawString(this.font, "Draw Sprite in a screen.",
Vector2.Zero, Color.White);
// スプライトの一括描画
this.spriteBatch.End();
Начертайте текста в метода Draw.
Методът "SpriteBatch.DrawString" се използва за рисуване на текста, но тъй като текстът е начертан като спрайт, методите "SpriteBatch.Begin" и "SpriteBatch.End" се извикват съответно преди и след рисуване.
Първият аргумент на метода SpriteBatch.DrawString е класът "SpriteFont", който сте създали. Това ви позволява да рисувате знаци в стила, посочен в шрифта на спрайта. Вторият аргумент е низът, който трябва да се покаже.
SpriteBatch.Begin
метод
Наречете го, преди да нарисувате спрайта. Вътрешно правим необходимите настройки за рисуване на спрайтове.
SpriteBatch.DrawString
метод
Начертайте връв.
spriteFont | SpriteFont | Указва SpriteFont, който съдържа изображението на низ. |
Текст | низ | Указва текста за показване. |
положение | Вектор2 | Позицията, на която да се покаже текстът. Посочете в координатите на екрана спрямо горния ляв ъгъл на екрана. Произходът на текста ще бъде в горния ляв ъгъл на първия знак. |
цвят | Цвят | Цвят на текста |
SpriteBatch.End
метод
Начертайте всички партидни спрайтове. Редът на чертане, състоянието на теглене и т.н. са посочени в метода SpriteBatch.Begin. Ако е необходимо, състоянието на render се връща в състоянието, в което е било преди да бъде извикан методът SpriteBatch.Begin.
Няма проблем с дисплей, използван на компютър и т.н., но когато извеждате от Xbox 360 към аналогов телевизор, може да не успеете да видите текста, показан в горния ляв ъгъл. В този случай трябва да регулирате позицията на показване на знаците, което ще бъде обяснено в "Посочете позицията за рисуване на знаците".
Едно нещо, което трябва да се отбележи за тази извадка, е, че тя не може да показва японски йероглифи. Ако посочите японски за метода SpriteBatch.DrawString, ще възникне изключение. Този път могат да се показват само буквено-цифрови знаци и символи, дефинирани в 32~126, посочени в Unicode. Бих искал да ви представя как да показвате японски в друг съвет.
Уникод таблици (32~127)
(Числата в редове ×16 + числа в колони) ще бъде кодът.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Една | B | C | D | E | F | ||
2 | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | ||
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | |
4 | @ | Една | 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 | ` | една | 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 DrawAlphameric
{
<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 font = 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.font = this.Content.Load<SpriteFont>("Font");
}
<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.font, "Draw Sprite in a screen.",
Vector2.Zero, Color.White);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}