Fai apparire lo sprite

Pagina aggiornata :
Data di creazione della pagina :

sommario

Carica la texture (immagine) e visualizzala sullo schermo.

スプライトを表示させる

Ambiente operativo

Prerequisiti

Versioni XNA supportate
  • 2.0
  • 3.0
  • 3.1
  • 4.0
Piattaforme supportate
  • Windows (XP SP2 o successivo, Vista, 7)
  • Xbox 360
  • Windows Phone 7
Versione Vertex Shader richiesta da Windows 2.0
Versione Pixel Shader richiesta da Windows 2.0

Ambiente operativo

piattaforma
  • finestre 7
  • Xbox 360
  • Emulatore di Windows Phone 7

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.

プロジェクトに Texture.png を追加

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