user908588
user908588

Reputation: 33

XNA SpriteBatches- making them draw offset?

Any suggestions for a good way to do this?

I want to be able to draw lots of 2D things in XNA- often in offset position. eg if something is in position (X,Y) then ideally I'd like to be able to pass it a modified SpriteBatch which, when Draw(X,Y) is called would take account of the offset and draw the thing at (X+OffsetX, Y+OffsetY).

I don't want to pass this offset to the children and have to deal with it separately in each child- that could screw up and would also screw up my interfaces!

Firstly I thought of having a Decorator to a SpriteBatch which if I call Decorator.Draw for something in position (X,Y) would route this to the original SpriteBatch as (X+offsetX, y+offsetY). But then I can't override the Draw methods in the SpriteBatch class, and even if I created my own "Decorator.DrawOffset", the Decorator seems to need "SpriteBatch.Begin()" called and stuff which seems to break... :(

I then thought of Extension Methods, but I think they'd need the offset passed to them as a variable each time draw() is called? Which still requires me to pass the offset down through the children...

Another option would be to draw the children to a RenderTarget (or whatever they are in XNA4) and then render this to the screen in an offset position... but that seems hideously inefficient?

Thanks for any comments!

Upvotes: 3

Views: 1041

Answers (1)

Blau
Blau

Reputation: 5762

you should use a Transformation Matrix.

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

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

Upvotes: 7

Related Questions