Fai apparire lo sprite
sommario
Carica la texture (immagine) e visualizzala sullo schermo.
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
Cos'è uno sprite?
Un'area rettangolare per disegnare immagini sullo schermo. Questa funzione viene spesso utilizzata nei giochi 2D, ma viene spesso utilizzata anche in 3D come disegno di immagini pseudo-2D.
In XNA, tutto deve essere disegnato in poligoni 3D, quindi l'immagine che disegni sullo schermo è uno pseudo-sprite che utilizza poligoni. Tuttavia, non è necessario essere consapevoli dei poligoni e puoi facilmente disegnarli.
Preparazione delle immagini
Poiché l'immagine viene visualizzata, è necessario preparare un file di immagine. Nell'esempio viene utilizzata l'immagine seguente.
Sto usando un file PNG con una dimensione di 128×128, ma può essere di qualsiasi dimensione. Inoltre, il formato del file immagine che può essere letto è il seguente file per impostazione predefinita.
- .Bmp
- .Dds
- .Dib
- .Hdr
- .jpg
- .pfm
- .png
- .Ppm
- .tga
Aggiungere un'immagine al progetto
Nell'esempio, il file di immagine viene inserito nel progetto "Content". Fare riferimento alla pagina seguente per i dettagli su come aggiungere file immagine al progetto.
campo
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
テクスチャー
</summary>
private Texture2D texture = null;
Per disegnare uno sprite, preparare "SpriteBatch" per raggruppare gli sprite da disegnare e "Texture2D" per archiviare i dati dell'immagine 2D.
Creazione e caricamento delle risorse
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// テクスチャーをコンテンツパイプラインから読み込む
this.texture = this.Content.Load<Texture2D>("Texture");
}
All'interno del metodo LoadGraphicsContent creare una classe SpriteBatch. Passare un GraphicsDevice come argomento.
Il metodo ContentManager.Load viene quindi utilizzato per caricare e creare la trama. Specificare la classe "Texture2D" per il parametro type e il nome dell'asset per l'argomento.
SpriteBatch
costruttore
Creare un'istanza della classe "SpriteBatch" che raggruppa il disegno di sprite.
graficaDispositivo | Dispositivo grafico | Specifica l'oggetto GraphicsDevice da utilizzare per il disegno. |
disegno
// スプライトの描画準備
this.spriteBatch.Begin();
// スプライトを描画する
this.spriteBatch.Draw(this.texture, Vector2.Zero, Color.White);
// スプライトの一括描画
this.spriteBatch.End();
Disegna il testo con il metodo Draw.
Per disegnare uno sprite, usare il metodo "SpriteBatch.Draw", ma è necessario chiamare i metodi "SpriteBatch.Begin" e "SpriteBatch.End", rispettivamente, prima e dopo il disegno.
Il primo argomento del metodo SpriteBatch.Draw è la classe "Texture2D" creata. Ciò ti consentirà di visualizzare il file immagine importato.
SpriteBatch.Begin
metodo
Chiamalo prima di disegnare lo sprite. Internamente, stiamo effettuando le impostazioni necessarie per disegnare gli sprite.
SpriteBatch.Draw
metodo
Aggiunge uno sprite all'elenco batch di disegno degli sprite.
trama | Struttura2D | Specifica la texture da visualizzare come sprite. |
posizione | Vettore 2 | La posizione in cui deve essere visualizzato lo sprite. Specificare le coordinate dello schermo relative alla parte superiore sinistra dello schermo. L'origine dello sprite sarà nella posizione in alto a sinistra. |
Colore | Colore | Specifica il colore per moltiplicare il colore dello sprite. Se si specifica Color.White, viene visualizzato nel colore primario dello sprite. Se si specifica Color.Black, lo sprite viene visualizzato in nero completo, indipendentemente dal colore. La formula è "Risultato = colore sprite * colore". |
SpriteBatch.End
metodo
Disegna tutti gli sprite in batch. L'ordine di disegno, lo stato di disegno e così via sono specificati nel metodo SpriteBatch.Begin. Se necessario, lo stato di rendering viene ripristinato allo stato in cui si trovava prima della chiamata al metodo SpriteBatch.Begin.
Non ci sono problemi con un display utilizzato su un computer, ecc., ma durante l'output da una Xbox 360 a una TV analogica, potresti non essere in grado di vedere lo sprite visualizzato in alto a sinistra. In questo caso, è necessario regolare la posizione di visualizzazione dello sprite, ma questo verrà spiegato in un'altra sezione.
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 DrawSprite
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
テクスチャー
</summary>
private Texture2D texture = 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.texture = this.Content.Load<Texture2D>("Texture");
}
<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.Draw(this.texture, Vector2.Zero, Color.White);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}