Для меню в моей игре я рисую их один раз на экране, затем перерисовывайте только в том случае, если они сочтены грязными. Это обрабатывается с помощью логического значения true, когда пользователь выполняет действие, которое должно вызвать перерисовку, а затем цикл рисования проверяет это значение перед рисованием меню. Эта логика отлично работала в 3.1, но в 4.0 меню будет мигать (нарисовано на 1 кадр), а затем показывать фиолетовый экран, пока не будет нарисовано снова.
Я создал очень простую тестовую игру в 4.0, чтобы продемонстрировать проблему, показанную ниже. Вы заметите, что экран выглядит фиолетовым. Если вы удалите строку, для которой _isDirty установлено значение false, вы увидите васильковый синий фон.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
bool _isDirty = true;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
}
protected override void Draw(GameTime gameTime)
{
if (_isDirty)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
_isDirty = false;
}
base.Draw(gameTime);
}
}
Как мне получить поведение от XNA 3.1? Я видел, как несколько людей упоминали PreserveContents, но, похоже, это не имеет никакого эффекта в 4.0, если я не применяю его неправильно.