XNA SpriteBatches-让它们画出偏移?

时间:2011-08-23 22:40:17

标签: c#-4.0 xna xna-4.0

有什么好方法可以做到吗?

我希望能够在XNA中绘制很多2D东西 - 经常在偏移位置。例如,如果某物处于位置(X,Y),那么理想情况下我希望能够传递一个修改过的SpriteBatch,当调用Draw(X,Y)时会考虑偏移量并将物体绘制在(X) + OffsetX,Y + OffsetY)。

我不想将这种偏移传递给孩子,并且必须在每个孩子中单独处理它 - 这可能搞砸了,也会搞砸我的界面!

首先我想到了一个SpriteBatch的装饰器,如果我将Decorator.Draw称为位置(X,Y)中的某个东西,则会将其作为(X + offsetX,y + offsetY)路由到原始的SpriteBatch。但是后来我无法覆盖SpriteBatch类中的Draw方法,即使我创建了自己的“Decorator.DrawOffset”,装饰器似乎也需要调用“SpriteBatch.Begin()”和看起来破坏的东西...... :(

然后我想到了扩展方法,但我认为每次调用draw()时它们都需要将偏移作为变量传递给它们?这仍然需要我通过孩子们传递抵消......

另一种选择是将子画面绘制到RenderTarget(或者它们在XNA4中的任何东西),然后将它渲染到偏移位置的屏幕......但这看起来非常低效?

感谢您的任何评论!

1 个答案:

答案 0 :(得分:5)

你应该使用转换矩阵。

Matrix Transform = Matrix.CreateTranslation(offsetX, offsetY, 0);

SpriteBatch.Begin(...,...,...., Transform);