旋轉 Sprite
更新頁 :
頁面創建日期 :
總結
旋轉 Sprite。 在示例中,旋轉會自動旋轉,以便於理解。
經營環境
先決條件
支援的 XNA 版本 |
|
支援的平臺 |
|
Windows 所需的頂點著色器版本 | 2.0 |
Windows 所需的像素著色器版本 | 2.0 |
經營環境
平臺 |
|
物質
若要旋轉 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);
}
}
}