Monogame - ошибка изменения цвета фона

Я создаю 2D-платформер и хочу иметь разные цветные фоны для каждого уровня. Я сделал объект, который при столкновении с ним переводит персонажа на следующий уровень, изменяя player.Position, вот так...

protected override void Update(GameTime gameTime){

    if (player.Bounds.Intersects(teleportObj.Bounds))
    {
        GraphicsDevice.Clear(Color.SlateGray); // fails to change bg color
        player.Position = new Vector2(172, 0); // successfully changes character position
        MediaPlayer.Play(dungeonSong);  // successfully plays new song
        MediaPlayer.IsRepeating = true;  // successfully repeats new song
    }
}

Я уже установил фон для первого уровня в функции Draw() Game1 следующим образом:

GraphicsDevice.Clear(Color.CornflowerBlue);

Но когда мой проигрыватель сталкивается с teleportObj, цвет фона не меняется.


person toadflax    schedule 28.05.2016    source источник


Ответы (1)


GraphicsDevice.Clear(Color.SlateGray); используется в функции Draw. Попробуйте создать новую переменную Color и измените эту переменную в методе Update, а при использовании GraphicsDevice.Clear(name of the variable); используйте ее в функции Draw.

Код для этого будет выглядеть так:

Color backgroundColor = Color.CornflowerBlue;
protected override void Update(GameTime gameTime)
{    
    if (player.Bounds.Intersects(teleportObj.Bounds))
    {
        backgroundColor = Color.SlateGray;
        player.Position = new Vector2(172, 0); 
        MediaPlayer.Play(dungeonSong);
        MediaPlayer.IsRepeating = true;
    }
    else backgroundColor = Color.CornflowerBlue; 
}

protected override void Draw(SpriteBatch spriteBatch)
{    
    GraphicsDevice.Clear(backgroundColor);
    *draw other stuff*
}
person Monset    schedule 28.05.2016