XNA SpriteBatches - заставить их рисовать смещение? - PullRequest
1 голос
/ 24 августа 2011

Какие-нибудь предложения для хорошего способа сделать это?

Я хочу иметь возможность рисовать много 2D-объектов в XNA - часто в смещенной позиции.например, если что-то находится в позиции (X, Y), то в идеале я хотел бы иметь возможность передать ему модифицированный SpriteBatch, который при вызове Draw (X, Y) будет учитывать смещение и рисовать объект в (X).+ OffsetX, Y + OffsetY).

Я не хочу передавать это смещение дочерним элементам и иметь дело с ним отдельно в каждом дочернем элементе - это может испортить, а также испортить мои интерфейсы!

Сначала я подумал о том, чтобы иметь декоратор для SpriteBatch, который, если я вызову Decorator.Draw для чего-то в позиции (X, Y), перенаправит его в исходный SpriteBatch как (X + offsetX, y + offsetY).Но тогда я не могу переопределить методы Draw в классе SpriteBatch, и даже если я создал свой собственный "Decorator.DrawOffset", декоратору, похоже, нужно вызвать "SpriteBatch.Begin ()" и что-то, что может сломаться ...: (

Затем я подумал о методах расширения, но я думаю, что они будут нуждаться в смещении, передаваемом им в качестве переменной каждый раз, когда вызывается draw ()? Что все еще требует, чтобы я передавал смещение вниз через дочерние элементы?...

Другим вариантом было бы нарисовать дочерние элементы к объекту RenderTarget (или к чему бы то ни было в XNA4), а затем отобразить это на экране в смещенной позиции ... но это кажется ужасно неэффективным?

Спасибо за любые комментарии!

1 Ответ

5 голосов
/ 24 августа 2011

Вы должны использовать Матрицу преобразования.

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

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