单一对象的单游戏XNA变换矩阵

本文关键字:XNA 变换 游戏 对象 单游戏 单一 | 更新日期: 2023-09-27 17:50:49

我已经阅读了一些教程,解释了XNA/Monogame的变换矩阵。问题是这些矩阵应用于

SpriteBatch.Begin(...matrix);

这意味着所有的Draw代码都将被转换。如何将变换矩阵应用于单个可绘制对象?在我的例子中,我想转换一个滚动背景,使其自动换行。

SpriteBatch.Draw(.. this has no transform matrix parameter?);

单一对象的单游戏XNA变换矩阵

如果你想使用一个特定的spritebatch开始调用一些绘图调用,你可以根据需要开始一个新的。

例如

SpriteBatch.Begin(...matrix);
//Draw stuff with matrix
SpriteBatch.End();
SpriteBatch.Begin();
//do the rest of the drawing
SpriteBatch.End();

这通常用于在适当的位置,比例和旋转上绘制一堆带有"相机"矩阵的对象,然后是另一个spritebatch。调用Begin来在上面绘制平面的、静态的UI等

我有同样的问题,但使用SpriteBatch.Begin()SpriteBatch.End()不适合我的情况。

您可以像这样转换单个可绘制对象(此代码假设对象被绘制到目标Rectangle):

static Point Transform(Point point, Matrix matrix)
{
    var vector = point.ToVector2();
    var transformedVector = Vector2.Transform(vector, Matrix.Invert(matrix));
    return transformedVector.ToPoint();
}
// matrix below is the same as the matrix you used in SpriteBatch.Begin(...matrix).
var destinationRectangle = new Rectangle(
    Transform(bounds.Location, matrix),
    Transform(bounds.Size, matrix)
);
// Draw the object to the destination rectangle!