Faça o sprite aparecer

Página atualizada :
Data de criação de página :

resumo

Carregue a textura (imagem) e exiba-a na tela.

スプライトを表示させる

Ambiente operacional

Pré-requisitos

Versões do XNA suportadas
  • 2.0
  • 3.0
  • 3.1
  • 4.0
Plataformas suportadas
  • Windows (XP SP2 ou posterior, Vista, 7)
  • Xbox 360
  • Windows Phone 7
Versão do sombreador de vértice necessária para Windows 2.0
Versão do sombreador de pixel necessária para Windows 2.0

Ambiente operacional

plataforma
  • janelas 7
  • Xbox 360
  • Emulador do Windows Phone 7

substância

O que é um sprite?

Uma área retangular para desenhar imagens na tela. Esse recurso é frequentemente usado em jogos 2D, mas também é frequentemente usado em 3D como um desenho de imagem pseudo-2D.

No XNA, tudo deve ser desenhado em polígonos 3D, então a imagem que você desenha na tela é um pseudo-sprite usando polígonos. No entanto, não há necessidade de estar ciente dos polígonos e você pode desenhá-los facilmente.

Preparando imagens

Como a imagem é exibida, um arquivo de imagem deve ser preparado. No exemplo, a imagem abaixo é usada.

スプライトとして表示させる画像

Estou usando um arquivo PNG com tamanho de 128×128, mas pode ser de qualquer tamanho. Além disso, o formato do arquivo de imagem que pode ser lido é o seguinte arquivo por padrão.

  • .Bmp
  • .Dds
  • .Dib
  • .Hdr
  • .jpg
  • .pfm
  • .png
  • .Ppm
  • .tga

Adicionar uma imagem ao seu projeto

No exemplo, o arquivo de imagem é colocado no projeto "Conteúdo". Consulte a página a seguir para obter detalhes sobre como adicionar arquivos de imagem ao seu projeto.

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

campo

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

/// <summary>
/// テクスチャー
/// </summary>
private Texture2D texture = null;

Para desenhar um sprite, prepare "SpriteBatch" para agrupar os sprites a serem desenhados e "Texture2D" para armazenar dados de imagem 2D.

Criando e carregando recursos

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

    // テクスチャーをコンテンツパイプラインから読み込む
    this.texture = this.Content.Load<Texture2D>("Texture");
}

Dentro do método LoadGraphicsContent, crie uma classe SpriteBatch. Passe um GraphicsDevice como o argumento.

O método ContentManager.Load é usado para carregar e criar a textura. Especifique a classe "Texture2D" para o parâmetro type e o nome do ativo para o argumento.

SpriteBatch construtor

Crie uma instância da classe "SpriteBatch" que agrupa o desenho de sprites.

Placa gráficapara dispositivos Dispositivo gráfico Especifica o GraphicsDevice a ser usado para desenhar.

desenho

// スプライトの描画準備
this.spriteBatch.Begin();

// スプライトを描画する
this.spriteBatch.Draw(this.texture, Vector2.Zero, Color.White);

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

Desenhe o texto no método Draw.

Para desenhar um sprite, use o método "SpriteBatch.Draw", mas você precisa chamar os métodos "SpriteBatch.Begin" e "SpriteBatch.End", respectivamente, antes e depois do desenho.

O primeiro argumento para o método SpriteBatch.Draw é a classe "Texture2D" que você criou. Isso permitirá que você visualize o arquivo de imagem importado.

SpriteBatch.Begin método

Chame-o antes de desenhar o sprite. Internamente, estamos fazendo as configurações necessárias para desenhar sprites.

SpriteBatch.Draw método

Adiciona um sprite à lista de lotes de desenho de sprite.

textura Textura2D Especifica a textura a ser exibida como um sprite.
posição Vetor 2 A posição em que o sprite deve ser exibido. Especifique as coordenadas da tela em relação ao canto superior esquerdo da tela. A origem do sprite estará na posição superior esquerda.
Cor Cor Especifica a cor para multiplicar a cor do sprite. Se você especificar Color.White, ele será exibido na cor primária do sprite. Se Color.Black for especificado, o sprite será exibido em preto total, independentemente de sua cor. A fórmula é "Resultado = cor do sprite * cor".

SpriteBatch.End método

Desenhe todos os sprites em lote. A ordem de desenho, o estado de desenho e assim por diante são especificados no método SpriteBatch.Begin. Se necessário, o estado de renderização é retornado ao estado em que estava antes do método SpriteBatch.Begin ser chamado.

スクリーンとスプライトの原点

Não há problema com uma tela usada em um computador, etc., mas ao enviar de um Xbox 360 para uma TV analógica, talvez você não consiga ver o sprite exibido no canto superior esquerdo. Nesse caso, você precisa ajustar a posição de exibição do sprite, mas isso será explicado em outra seção.

Todos os códigos

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