Hacer que aparezca el sprite

Actualización de la página :
Fecha de creación de la página :

resumen

Cargue la textura (imagen) y muéstrela en la pantalla.

スプライトを表示させる

Entorno operativo

Prerrequisitos

Versiones de XNA compatibles
  • 2.0
  • 3.0
  • 3.1
  • 4.0
Plataformas compatibles
  • Windows (XP SP2 o posterior, Vista, 7)
  • Xbox 360
  • Windows Phone 7
Versión requerida del sombreador de vértices de Windows 2.0
Versión de Pixel Shader requerida para Windows 2.0

Entorno operativo

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

sustancia

¿Qué es un sprite?

Un área rectangular para dibujar imágenes en la pantalla. Esta característica se usa a menudo en juegos 2D, pero también se usa a menudo en 3D como un dibujo de imagen pseudo-2D.

En XNA, todo debe dibujarse en polígonos 3D, por lo que la imagen que dibujas en la pantalla es un pseudo-sprite que usa polígonos. Sin embargo, no es necesario tener en cuenta los polígonos y puede dibujarlos fácilmente.

Preparación de imágenes

Dado que se muestra la imagen, se debe preparar un archivo de imagen. En el ejemplo, se utiliza la imagen siguiente.

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

Estoy usando un archivo PNG con un tamaño de 128×128, pero puede ser de cualquier tamaño. Además, el formato del archivo de imagen que se puede leer es el siguiente archivo de forma predeterminada.

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

Añade una imagen a tu proyecto

En el ejemplo, el archivo de imagen se coloca en el proyecto "Contenido". Consulte la siguiente página para obtener detalles sobre cómo agregar archivos de imagen a su proyecto.

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

campo

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

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

Para dibujar un sprite, prepare "SpriteBatch" para agrupar los sprites que se van a dibujar y "Texture2D" para almacenar datos de imagen 2D.

Creación y carga de recursos

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

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

Dentro del método LoadGraphicsContent, cree una clase SpriteBatch. Pase un GraphicsDevice como argumento.

A continuación, se usa el método ContentManager.Load para cargar y crear la textura. Especifique la clase "Texture2D" para el parámetro type y el nombre del recurso para el argumento.

SpriteBatch constructor

Cree una instancia de la clase "SpriteBatch" que agrupe el dibujo de sprites.

gráficosDispositivo Dispositivo gráfico Especifica el GraphicsDevice que se va a utilizar para dibujar.

dibujo

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

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

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

Dibuje el texto en el método Draw.

Para dibujar un sprite, use el método "SpriteBatch.Draw", pero debe llamar a los métodos "SpriteBatch.Begin" y "SpriteBatch.End", respectivamente, antes y después de dibujar.

El primer argumento del método SpriteBatch.Draw es la clase "Texture2D" que ha creado. Esto le permitirá ver el archivo de imagen importado.

SpriteBatch.Begin método

Llámalo antes de dibujar el sprite. Internamente, estamos haciendo los ajustes necesarios para dibujar sprites.

SpriteBatch.Draw método

Agrega un sprite a la lista de lotes de dibujo de sprites.

textura Textura2D Especifica la textura que se va a mostrar como un sprite.
posición Vector2 La posición en la que se debe mostrar el sprite. Especifique en la pantalla las coordenadas relativas a la parte superior izquierda de la pantalla. El origen del sprite estará en la posición superior izquierda.
Color Color Especifica el color para multiplicar el color del sprite. Si especifica Color.White, se muestra en el color primario del sprite. Si se especifica Color.Black, el sprite se muestra en negro completo, independientemente de su color. La fórmula es "Resultado = color del sprite * color".

SpriteBatch.End método

Dibuja todos los sprites por lotes. El orden de dibujo, el estado de dibujo, etc., se especifican en el método SpriteBatch.Begin. Si es necesario, el estado de representación se devuelve al estado en el que se encontraba antes de que se llamara al método SpriteBatch.Begin.

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

No hay ningún problema con una pantalla utilizada en una computadora, etc., pero al emitir desde una Xbox 360 a un televisor analógico, es posible que no pueda ver el sprite que se muestra en la parte superior izquierda. En este caso, es necesario ajustar la posición de visualización del sprite, pero eso se explicará en otra sección.

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