Microsoft Xna Texture2D和旋转
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Microsoft Xna Texture2D和旋转相关的知识,希望对你有一定的参考价值。
我有一组图像,其中每个图像都必须能够旋转到90度,180度和270度。所有这些图像均为Texture2D类型。是否有内置功能可以帮助我完成此任务?还是我应该加载每个图像的其他旋转图像?还是有更好的方法来完成此任务?
尽管您将需要指定大部分(或全部)参数,但是当您使用SpriteBatch.Draw
将纹理绘制到缓冲区时,可以旋转(和缩放)纹理。角度以弧度表示。
SpriteBatch.Begin();
angle = (float)Math.PI / 2.0f; // 90 degrees
scale = 1.0f;
SpriteBatch.Draw(myTexture, sourceRect, destRect, Color.White, angle,
position, scale, SpriteEffects.None, 0.0f);
SpriteBatch.End();
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.draw.aspx
您还可以加载图像的预旋转副本,但是您可能会获得通常的Premature Optimization讲座。
如果只想旋转Texture2D字段而不更改Draw方法中的任何内容,则可以使用它(它将输入顺时针旋转90度:]
public static Texture2D RotateTexture90Deegrees(Texture2D input)
{
Texture2D rotated = null;
if (input != null)
{
rotated = new Texture2D(input.GraphicsDevice, input.Width, input.Height);
Color[] data = new Color[input.Width * input.Height];
Color[] rotated_data = new Color[data.Length];
input.GetData<Color>(data);
var Xcounter = 1;
var Ycounter = 0;
for (int i = 0; i < data.Length; i++)
{
rotated_data[i] = data[((input.Width * Xcounter)-1) - Ycounter];
Xcounter += 1;
if (Xcounter > input.Width)
{
Xcounter = 1;
Ycounter += 1;
}
}
rotated.SetData<Color>(rotated_data);
}
return rotated;
}
以上是关于Microsoft Xna Texture2D和旋转的主要内容,如果未能解决你的问题,请参考以下文章
有没有从XNA中的Bitmap对象创建Texture2D的快速替代方法?
XNA Texture2D.FromStream以1为单位暂时返回颜色通道
Visual Studio Intellisense没有显示某些类
C# 无法从 'float' 转换为 'Microsoft.Xna.Framework.Point'
尝试使用 Microsoft.Xna.Framework 将 wma 文件加载为 SoundEffect 时发生 InvalidOperationException