旋轉 Sprite

更新頁 :
頁面創建日期 :

總結

旋轉 Sprite。 在示例中,旋轉會自動旋轉,以便於理解。

スプライトを回転させる

經營環境

先決條件

支援的 XNA 版本
  • 2.0
  • 3.0
  • 3.1
  • 4.0
支援的平臺
  • Windows(XP SP2 或更高版本、Vista、7)
  • Xbox 360 的
  • Windows Phone 7 操作系統
Windows 所需的頂點著色器版本 2.0
Windows 所需的像素著色器版本 2.0

經營環境

平臺
  • 視窗 7
  • Xbox 360 的
  • Windows Phone 7 模擬器

物質

若要旋轉 Sprite,請在 “SpriteBatch.Draw” 方法的第 5 個參數中將旋轉角度指定為 “radian”。 常用的數字單位 0~360 稱為“度”,“弧度”是 0~2π 的值。

在該示例中,通常可識別的度數單位用於使用 「MathHelper.ToRadians」 方法將數位轉換為弧度,並將其傳遞給參數。

// リアルタイムに回転させてスプライトを描画する
this.spriteBatch.Draw(this.texture, new Vector2(200.0f, 200.0f), null,
    Color.White, MathHelper.ToRadians(this.realRotate), Vector2.Zero, 1.0f,
    SpriteEffects.None, 0.0f);

SpriteBatch.Draw 方法

將 Sprite 新增到 Sprite 繪製批處理清單中。

質地 紋理2D 指定要顯示為 Sprite 的紋理。
位置 向量 2 sprite 應顯示的位置。 在螢幕座標中指定相對於螢幕左上角的座標。 精靈的原點將位於左上角位置。
sourceRectangle 的 Nullable<Rectangle 的 Nullable> 指定紋理的傳輸區域。 如果希望將整個紋理顯示為sprite,則可以指定 null。 如果指定此參數,則只能將任意區域顯示為Sprite。
顏色 顏色 指定顏色以乘以 Sprite 的顏色。 如果指定 Color.White,它將以 Sprite 的原色顯示。 如果指定了 Color.Black,則 sprite 將以全黑顯示,而不管其顏色如何。 公式為“結果 = sprite 顏色 * 顏色”。
旋轉 Sprite 的旋轉角度。 單位以弧度指定。 旋轉軸將位於sprite的左上角。
起源 向量 2 指定旋轉 Sprite 時旋轉軸的位置。 您可以指定Sprite的哪個位置是旋轉軸,但實際上,旋轉軸的位置固定在Sprite的左上角,並且Sprite的顯示位置由 -origin 移動。
規模 指定 Sprite 的放大倍數。 相對於 1.0 垂直和水平縮放。 放大的原點將位於Sprite的左上角。
影響 SpriteEffects (精靈效果) 指定 Sprite 的翻轉效果。 如果不執行任何其他操作,請指定SpriteEffects.None。
layerDepth 層深度 指定 Sprite 的顯示深度。 主要用於在前臺和後台顯示sprite。 在 0.0~1.0 的範圍內指定,其中 0.0 是前部,1.0 是後部。

MathHelper.ToRadians 方法

將度數值轉換為弧度。 轉換公式為「弧度 = 度 * π / 180.0」。。

指定要轉換為弧度的度數值。
返回值 返回轉換為弧度的度數值。

旋轉軸預設為Sprite的左上角位置。

回転軸位置

所有代碼

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 RotateSprite
{
    /// <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>
        /// リアルタイムに増加する回転量(degree)
        /// </summary>
        float realRotate = 0.0f;


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

            // 回転量を増やす
            this.realRotate += (float)gameTime.ElapsedGameTime.TotalSeconds * 60.0f;

            // 登録された 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, new Vector2(200.0f, 200.0f), null,
                Color.White, MathHelper.ToRadians(0.0f), Vector2.Zero, 1.0f,
                SpriteEffects.None, 0.0f);

            // リアルタイムに回転させてスプライトを描画する
            this.spriteBatch.Draw(this.texture, new Vector2(200.0f, 200.0f), null,
                Color.White, MathHelper.ToRadians(this.realRotate), Vector2.Zero, 1.0f,
                SpriteEffects.None, 0.0f);

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

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}