XNA 3.1–4.0 требует постоянной перерисовки или будет отображать фиолетовый экран

Для меню в моей игре я рисую их один раз на экране, затем перерисовывайте только в том случае, если они сочтены грязными. Это обрабатывается с помощью логического значения 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, если я не применяю его неправильно.

6
задан Mike Dearing 20 November 2010 в 22:54
поделиться