有什么好方法可以做到吗?
我希望能够在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中的任何东西),然后将它渲染到偏移位置的屏幕......但这看起来非常低效?
感谢您的任何评论!
答案 0 :(得分:5)
你应该使用转换矩阵。
Matrix Transform = Matrix.CreateTranslation(offsetX, offsetY, 0);
SpriteBatch.Begin(...,...,...., Transform);