Привет, ребята, я пытаюсь использовать следующую логику рисования:
Class Game
{
Character x;
public Draw(...)
{
spriteBatch.Begin(transformation1);
x.Draw();
spriteBatch.End();
spriteBatch.Begin(transformation2);
otherThing.Draw();
spriteBatch.End();
}
}
Class Character
{
Animation[] animations;
int currentAnimation;
public Draw(...)
{
this.animations[this.currentAnimation].Draw();
}
}
Class Animation
{
Frame[] frames;
int currentFrame;
public Draw(...)
{
this.frames[this.currentFrame].Draw();
}
}
Class Frame
{
Texture2D texture;
Texture2D shadow;
public Draw(...)
{
spriteBatch.Begin(sub_transformation1);
spriteBatch.Draw(texture1, ...);
spriteBatch.End();
spriteBatch.Begin(sub_transformation2);
spriteBatch.Draw(shadow, ...);
spriteBatch.End();
}
}
Если я попробую эту логику, я получу «Начало не может быть вызвано снова, пока End не будет успешно вызван». ошибка. Поэтому я спрашиваю, возможна ли / имеет ли смысл эта логика? Я использую Begin() внутри Begin() для выполнения аддитивных преобразований. Если у меня есть символ на x = 100 и y = 100, и я хочу, чтобы текстура и тень кадра и все остальное, что я хочу (ограничивающие рамки и т. д.), были нарисованы с использованием этого перевода 100 100 плюс -Xscale или +Xscale для горизонтального отражения персонажа (я знаю, что мог бы использовать SpriteEffects.FlipHorizontally в .Draw, но я хотел что-то, что автоматически применялось бы к нижним уровням (анимация и кадр)), и, наконец, на уровне кадра текстура имеет преобразование на сверху один от персонажа, а у тени есть еще один. Не знаю, хорошо ли я объяснил, но спросите, есть ли у вас сомнения.
Большое спасибо.