Mostra caràcters alfanumèrics

Pàgina actualitzada :
Data de creació de la pàgina :

resum

Mostra una cadena de caràcters arbitrària (alfanumèrica) a la pantalla.

英数字を表示させる

Entorn operatiu

Prerequisits

Versions XNA compatibles
  • 2.0
  • 3.0
  • 3.1
  • 4.0
Plataformes compatibles
  • Windows (XP SP2 o posterior, Vista, 7)
  • Xbox 360
  • Windows Phone 7
Versió del shader de vèrtex necessària per al Windows 2.0
Versió de Pixel Shader necessària per a Windows 2.0

Entorn operatiu

plataforma
  • Windows 7
  • Xbox 360
  • Emulador de Windows Phone 7

substància

Per mostrar text en XNA, necessiteu un fitxer anomenat "tipus de lletra sprite" que descrigui la informació del tipus de lletra. L'extensió és ". Spritefont. Els fitxers de tipus de lletra Sprite estan escrits en un format ampliat d'XML, de manera que es poden reescriure fàcilment. Per crear un tipus de lletra sprite, feu el següent:

Feu clic amb el botó dret al projecte Content i feu clic a Afegeix → element nou.

S'obre el diàleg Afegeix un element nou.

A la plantilla instal·lada, hi ha un element anomenat "Sprite Font", així que seleccioneu-lo.

Especifiqueu un nom de fitxer, però aquí es diu "Font.spritefont". Bàsicament, podeu establir el nom que vulgueu.

Després d'entrar, premeu el botó "Afegeix" a la part inferior dreta.

Quan creeu un fitxer, el fitxer de tipus de lletra sprite està obert.

També s'ha afegit al projecte de contingut.

El contingut del tipus de lletra sprite es pot deixar com a predeterminat, però aquesta vegada s'ha reescrit de la següent manera (els comentaris també són japonesos per a més claredat). Consulteu els comentaris per obtenir una explicació de cada node.

A més, s'explica una explicació detallada dels tipus de lletra sprite a la secció "Detalls de l'estil de lletra".

<?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>&#32;</Start>
        <End>&#126;</End>
      </CharacterRegion>
    </CharacterRegions>
  </Asset>
</XnaContent>

A continuació, descriuré el programa per dibuixar text.

/// <summary>
/// スプライトのバッチ化クラス
/// </summary>
private SpriteBatch spriteBatch = null;

/// <summary>
/// スプライトでテキストを描画するためのフォント
/// </summary>
private SpriteFont font = null;

Per dibuixar text, utilitzem dues classes: "SpriteBatch" i "SpriteFont". El text es dibuixarà com un sprite.

/// <summary>
/// ゲームが始まるときに一回だけ呼ばれ
/// すべてのゲームコンテンツを読み込みます
/// </summary>
protected override void LoadContent()
{
    // テクスチャーを描画するためのスプライトバッチクラスを作成します
    this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

    // フォントをコンテンツパイプラインから読み込む
    this.font = this.Content.Load<SpriteFont>("Font");
}

Dins del mètode LoadGraphicsContent, primer creeu una classe SpriteBatch. Passa un GraphicsDevice com a argument.

A continuació, utilitzeu el mètode ContentManager.Load per carregar el fitxer de tipus de lletra sprite que acabeu de crear. Especifiqueu la classe "SpriteFont" per al paràmetre type i el nom del recurs per a l'argument. Si no heu canviat el nom del tipus de lletra sprite, especifiqueu l'extensió de nom de fitxer suprimida.

Per obtenir més informació sobre la càrrega de contingut, vegeu "Càrrega de recursos (contingut)".

SpriteBatch constructor

Creeu una instància de la classe "SpriteBatch" que agrupa el dibuix dels sprites.

gràficsDispositiu Dispositius gràfics Especifica el dispositiu gràfic que s'utilitzarà per dibuixar.
// スプライトの描画準備
this.spriteBatch.Begin();

// テキストをスプライトとして描画する
this.spriteBatch.DrawString(this.font, "Draw Sprite in a screen.",
    Vector2.Zero, Color.White);

// スプライトの一括描画
this.spriteBatch.End();

Dibuixa el text al mètode Draw.

El mètode "SpriteBatch.DrawString" s'utilitza per dibuixar el text, però com que el text es dibuixa com a sprite, els mètodes "SpriteBatch.Begin" i "SpriteBatch.End" s'anomenen abans i després del dibuix, respectivament.

El primer argument del mètode SpriteBatch.DrawString és la classe "SpriteFont" que heu creat. Això us permet dibuixar caràcters en l'estil especificat al tipus de lletra sprite. El segon argument és la cadena que s'ha de mostrar.

SpriteBatch.Begin mètode

Digueu-lo abans de dibuixar l'sprite. Internament, estem fent els paràmetres necessaris per dibuixar sprites.

SpriteBatch.DrawString mètode

Dibuixa una corda.

spriteFont SpriteFont Especifica el SpriteFont que conté la imatge de cadena.
SMS corda Especifica el text que es mostrarà.
posició Vector2 La posició en què es mostra el text. Especifiqueu les coordenades de la pantalla en relació amb la part superior esquerra de la pantalla. L'origen del text estarà a la part superior esquerra del primer caràcter.
color Color Color del text

SpriteBatch.End mètode

Dibuixa tots els sprites per lots. L'ordre de dibuix, l'estat de dibuix, etc., s'especifiquen al mètode SpriteBatch.Begin. Si cal, l'estat de renderització es retorna a l'estat en què es trobava abans que es cridés el mètode SpriteBatch.Begin.

No hi ha cap problema amb una pantalla utilitzada en un ordinador, etc., però quan sortiu d'una Xbox 360 a un televisor analògic, és possible que no pugueu veure el text que es mostra a l'extrem superior esquerre. En aquest cas, heu d'ajustar la posició de visualització dels personatges, que s'explicarà a "Especificar la posició per dibuixar els personatges".

Una cosa a tenir en compte sobre aquesta mostra és que no pot mostrar caràcters japonesos. Si especifiqueu japonès per al mètode SpriteBatch.DrawString, es produirà una excepció. Aquesta vegada, només es poden mostrar els caràcters alfanumèrics i els símbols definits en 32~126 especificats en Unicode. M'agradaria introduir com mostrar el japonès en un altre consell.

Taules Unicode (32~127)

(Els números de les files ×16 + números de les columnes) serà el codi.

0 1 2 3 4 5 6 7 8 9 Un B C D E F
2 ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ Un B C D E F G H Jo J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` un b c d e f g h jo j k l m n o
7 p q r s t u v w x y z { } ~ 

Tots els codis

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);
        }
    }
}