单一对象的单游戏XNA变换矩阵
本文关键字:XNA 变换 游戏 对象 单游戏 单一 | 更新日期: 2023-09-27 17:50:49
我已经阅读了一些教程,解释了XNA/Monogame的变换矩阵。问题是这些矩阵应用于
SpriteBatch.Begin(...matrix);
这意味着所有的Draw代码都将被转换。如何将变换矩阵应用于单个可绘制对象?在我的例子中,我想转换一个滚动背景,使其自动换行。
SpriteBatch.Draw(.. this has no transform matrix parameter?);
如果你想使用一个特定的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!