use*_*588 1 xna xna-4.0 c#-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中的任何内容),然后将其渲染到偏移位置的屏幕上......但这看起来效率极低?
谢谢你的评论!
你应该使用转换矩阵.
Matrix Transform = Matrix.CreateTranslation(offsetX, offsetY, 0);
SpriteBatch.Begin(...,...,...., Transform);
Run Code Online (Sandbox Code Playgroud)