Disegnare il testo nel contesto
sommario
Usate il valore di profondità del livello per contestualizzare il testo. Nella schermata sottostante, sembra che venga disegnato un rettangolo pieno, ma viene disegnato "◆" con una dimensione del carattere più grande in modo che la sovrapposizione del testo sia facile da capire.
Ambiente operativo
Prerequisiti
Versioni XNA supportate |
|
Piattaforme supportate |
|
Versione Vertex Shader richiesta da Windows | 2.0 |
Versione Pixel Shader richiesta da Windows | 2.0 |
Ambiente operativo
piattaforma |
|
sostanza
In genere, quando si disegna del testo, viene disegnato ciò che viene successivamente in modo che venga portato in primo piano, ma ordinando in base al valore di profondità, è possibile visualizzare chiaramente il contesto indipendentemente dall'ordine in cui viene chiamato il metodo SpriteBatch.DrawString.
Per ordinare in base al valore di profondità del testo, specificare "SpriteSortMode.BackToFront" come primo argomento del metodo "SpriteBatch.Begin". Il secondo argomento è "BlendState", ma in questo caso il valore predefinito è null.
// 奥から描画するようにソート
this.spriteBatch.Begin(SpriteSortMode.BackToFront, null);
SpriteBatch.Begin
metodo
Chiamalo prima di disegnare lo sprite. Internamente, stiamo effettuando le impostazioni necessarie per disegnare gli sprite.
sortMode | SpriteSortMode | Specifica l'ordine in cui gli sprite vengono estratti dall'enumerazione SpriteSortMode. In questo caso, 0.0 viene considerato come primo piano e 1.0 come il più profondo, quindi disegneremo dallo sprite nella parte posteriore e disegneremo sullo sprite in primo piano, quindi specificando SpriteSortMode.BackToFront. |
blendState | Stato di fusione | BlendState specifica il modo in cui il colore si fonde con lo sfondo durante il disegno. Se si specifica null, viene utilizzato BlendState.AlphaBlend. |
Quindi, quando si disegna il testo, specificare il valore di profondità nel nono argomento del metodo SpriteBatch.DrawString. I valori che possono essere impostati qui sono nell'intervallo di 0,0~1,0, con 0,0 in primo piano e 1,0 in fondo.
// 手前に描画(白)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(150.0f, 100.0f), Color.White, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 0.0f);
// 奥に描画(赤)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(150.0f, 140.0f), Color.Red, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 1.0f);
// 2つの文字の間に描画(青)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(190.0f, 115.0f), Color.Blue, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 0.5f);
SpriteBatch.DrawString
metodo
Disegna una corda.
spriteFont | Carattere Sprite | Specifica l'oggetto SpriteFont che contiene l'immagine della stringa. |
Testo | corda | Specifica il testo da visualizzare. |
posizione | Vettore 2 | Posizione in cui visualizzare il testo. Specificare le coordinate dello schermo relative alla parte superiore sinistra dello schermo. L'origine del testo sarà in alto a sinistra del primo carattere. |
Colore | Colore | Colore del testo |
rotazione | galleggiare | L'angolo di rotazione del testo. Le unità sono specificate in radianti. L'asse di rotazione si troverà in alto a sinistra del testo. |
origine | Vettore 2 | Specifica la posizione dell'asse di rotazione durante la rotazione del testo. È possibile specificare quale posizione del testo è l'asse di rotazione, ma in realtà l'asse di rotazione è fissato in alto a sinistra del testo e la posizione di visualizzazione del testo viene spostata in base all'origine. |
scala | galleggiare | Specifica l'ingrandimento del testo. Utilizzando 1.0 come riferimento, ridimensionare verticalmente e orizzontalmente. L'origine dell'espansione si trova in alto a sinistra del testo. Esistono due modi per specificarlo: la specifica float, che è uguale all'altezza e alla larghezza, e Vector2, che può essere specificata con diversi ingrandimenti |
Effetti | SpriteEffects | Specifica l'effetto dell'inversione della visualizzazione del testo. Se non si esegue altre operazioni, specificare SpriteEffects.None. |
a stratiProfondità | galleggiare | Specifica la profondità di visualizzazione del testo. Viene utilizzato principalmente per visualizzare il testo in primo piano o in secondo piano. Specificare nell'intervallo di 0,0~1,0, dove 0,0 è la parte anteriore e 1,0 è la parte posteriore. |
Nel programma precedente, il metodo SpriteBatch.DrawString viene chiamato nell'ordine di "bianco", "rosso" e "blu", ma ogni valore di profondità è impostato su "bianco (0,0)", "rosso (1,0)" e "blu (0,5)", in modo da poter vedere che il rosso viene disegnato sul retro e il bianco viene disegnato in primo piano.
Tutti i codici
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 LayerDepthText
{
<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(SpriteSortMode.BackToFront, null);
// 手前に描画(白)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(150.0f, 100.0f), Color.White, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 0.0f);
// 奥に描画(赤)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(150.0f, 140.0f), Color.Red, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 1.0f);
// 2つの文字の間に描画(青)
this.spriteBatch.DrawString(this.font, "◆",
new Vector2(190.0f, 115.0f), Color.Blue, 0.0f, Vector2.Zero,
1.0f, SpriteEffects.None, 0.5f);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}