Visa alfanumeriska tecken
sammanfattning
Visa en godtycklig teckensträng (alfanumerisk) på skärmen.
Operativ miljö
Förutsättningar
XNA-versioner som stöds |
|
Plattformar som stöds |
|
Windows Nödvändig version av Vertex Shader | 2.0 |
Windows Pixel Shader-version som krävs | 2.0 |
Operativ miljö
plattform |
|
substans
För att kunna visa text i XNA behöver du en fil som kallas "sprite font" som beskriver teckensnittsinformationen. Tillägget är ". spritefont. Sprite-teckensnittsfiler är skrivna i ett utökat XML-format, så att de enkelt kan skrivas om. Så här skapar du ett sprite-teckensnitt:
Högerklicka på innehållsprojektet och klicka på Lägg till → nytt objekt.
Dialogrutan Lägg till nytt objekt öppnas.
I den installerade mallen finns det ett objekt som heter "Sprite Font", så välj det.
Ange ett filnamn, men här heter det "Font.spritefont". I grund och botten kan du ställa in vilket namn du vill.
När du har gått in trycker du på knappen "Lägg till" längst ner till höger.
När du skapar en fil är sprite-teckensnittsfilen öppen.
Det har också lagts till i innehållsprojektet.
Innehållet i sprite-teckensnittet kan lämnas som standard, men den här gången har det skrivits om enligt följande (kommentarerna är också japanska för tydlighetens skull). Se kommentarerna för en förklaring av varje nod.
Dessutom förklaras en detaljerad förklaring av sprite-teckensnitt i avsnittet "Information om teckensnittsstil".
<?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>
Därefter kommer jag att beskriva programmet för att rita text.
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
スプライトでテキストを描画するためのフォント
</summary>
private SpriteFont font = null;
För att rita text använder vi två klasser: "SpriteBatch" och "SpriteFont". Texten kommer att ritas som en sprite.
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// フォントをコンテンツパイプラインから読み込む
this.font = this.Content.Load<SpriteFont>("Font");
}
I metoden LoadGraphicsContent skapar du först en SpriteBatch-klass. Skicka en GraphicsDevice som argument.
Använd sedan metoden ContentManager.Load för att ladda sprite-teckensnittsfilen som du just skapade. Ange klassen "SpriteFont" för parametern type och resursnamnet för argumentet. Om du inte har ändrat resursnamnet för sprite-teckensnittet anger du filnamnstillägget som tagits bort.
Mer information om hur du läser in innehåll finns i "Läsa in resurser (innehåll)".
SpriteBatch
konstruktor
Skapa en instans av klassen "SpriteBatch" som batchar ritningen av sprites.
graphicsDevice (grafikEnhet) | Grafikenhet | Anger vilken GraphicsDevice som ska användas för att rita. |
// スプライトの描画準備
this.spriteBatch.Begin();
// テキストをスプライトとして描画する
this.spriteBatch.DrawString(this.font, "Draw Sprite in a screen.",
Vector2.Zero, Color.White);
// スプライトの一括描画
this.spriteBatch.End();
Rita texten i Draw metod.
Metoden "SpriteBatch.DrawString" används för att rita texten, men eftersom texten ritas som en sprite anropas metoderna "SpriteBatch.Begin" och "SpriteBatch.End" före respektive efter ritning.
Det första argumentet i metoden SpriteBatch.DrawString är klassen "SpriteFont" som du skapade. På så sätt kan du rita tecken i den stil som anges i sprite-teckensnittet. Det andra argumentet är strängen som ska visas.
SpriteBatch.Begin
metod
Anropa den innan du ritar sprajten. Internt gör vi de nödvändiga inställningarna för att rita sprites.
SpriteBatch.DrawString
metod
Rita ett snöre.
spriteFont | SpriteFont (på engelska) | Anger det SpriteFont som innehåller strängbilden. |
SMS | sträng | Anger vilken text som ska visas. |
position | Vektor2 | Den position där texten ska visas. Ange koordinater på skärmen i förhållande till det övre vänstra hörnet på skärmen. Textens ursprung kommer att vara längst upp till vänster i det första tecknet. |
färg | Färg | Textfärg |
SpriteBatch.End
metod
Rita alla grupperade sprajtar. Ritningsordningen, rittillståndet och så vidare anges i metoden SpriteBatch.Begin. Om det behövs returneras återgivningstillståndet till det tillstånd som det var i innan metoden SpriteBatch.Begin anropades.
Det är inga problem med en skärm som används på en dator etc., men när du matar ut från en Xbox 360 till en analog TV kanske du inte kan se texten som visas i det övre vänstra hörnet. I det här fallet måste du justera visningspositionen för tecknen, vilket kommer att förklaras i "Ange positionen för att rita tecknen".
En sak att notera om det här exemplet är att det inte kan visa japanska tecken. Om du anger japanska för metoden SpriteBatch.DrawString inträffar ett undantag. Den här gången kan endast alfanumeriska tecken och symboler definierade i 32~126 angivna i Unicode visas. Jag skulle vilja presentera hur man visar japanska i ett annat tips.
Unicode-tabeller (32~127)
(Siffror i rader ×16 + siffror i kolumner) kommer att vara koden.
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 | Jag | 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 | jag | j | k | l | m | n | o | |
7 | p | q | r | s | t | u | v | w | x | y | z | { | } | ~ | |
Alla koder
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);
}
}
}