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