Я вроде понимаю, откуда ты, но это просто невозможно.SpriteBatch не может быть иерархическим, как вы хотите.Ваши объекты, однако, могут.
Отредактировано немного, чтобы ответить на ваш вопрос ниже:
Class Frame
{
// World - parent transformation to build from, passed
// from animation, from character, on up the chain...
// localTransform - local coordinates
// shadowTransform - maybe not needed?
public Draw(Matrix world, Matrix localTransform, Matrix shadowTransform)
{
spriteBatch.Begin();
spriteBatch.Draw(
texture1,
...,
Matrix.Transform(world * localTransform),
...);
spriteBatch.Draw(
shadowTexture,
...,
Matrix.Transform(world * localTransform * shadowTransform),
...);
spriteBatch.End();
}
}
Вам не нужно передавать всю информацию о персонаже или объекте в кадр - просто нужнопреобразование, которое будет установлено родителем кадра.Ваш исходный код уже получал преобразование (sub_transformation1 и 2) откуда-то - здесь мы просто передаем это значение в функцию Draw.Вы также можете сделать переменную класса localTransform, установить ее для экземпляра.
Класс Animation будет иметь аналогичную сигнатуру Draw (Matrix world ...).Я думаю, что он достигает того, что вы ищете, и в некотором роде похож на то, как OpenGL обрабатывает вещи - просто больше руководства (из того, что я помню об этом много лет назад).gamedev.stackexchange.com и по вопросам, связанным с игрой.