Как я могу угаснуть что-то, чтобы очистить вместо белого?

У меня есть игра XNA, в которой, по сути, есть «текст с плавающим боеком»: короткоживущие сообщения, отображаемые на долю секунды, а затем исчезающие.

Недавно я добавил постепенный эффект «угасания», например:

 public void Update()
        {
            color.A -= 10;
            position.X += 3;
            if (color.A <= 10) isDead = true;
        }

Где color - это цвет, в котором отображается сообщение. Это работает, как и ожидалось, однако, оно уменьшает сообщения до white , что очень заметно на моем фоне индиго.

Есть ли способ потушить его прозрачным, а не белым? Lerp-ing в сторону цвета фона не является вариантом, так как есть вероятность, что между текстом и фоном будет что-то, что просто будет обратным текущей проблеме.

5 голосов | спросил Raven Dreamer 13 AMpFri, 13 Apr 2012 09:53:37 +040053Friday 2012, 09:53:37

2 ответа


6

Если вы работаете с предварительной мультиплексированной альфой, по умолчанию, вам нужно умножить альфа ....

public void Update()
{
      color*= 0.95f;
      position.X += 3;
      if (color.A <= 10) isDead = true;
}

Разница заключается в том, что вы изменяете цвет, т. е. все значения одновременно и равномерно, а не только значение альфа.

ответил Blau 13 PMpFri, 13 Apr 2012 12:38:48 +040038Friday 2012, 12:38:48
9

Вы делаете именно то, что должны делать - изменение альфа-канала цвета, который вы используете при рисовании спрайта. Это не проблема.

Проблема заключается в том, что если вы просто используете поведение SpriteBatch.Begin () по умолчанию, ваш спрайт будет смешиваться с его цветом (обычно: белый), а не смешиваться с фактической прозрачностью. Что вам нужно сделать, это установить BlendState в BlendState.NonPremultiplied, тогда все будет хорошо.

SpriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied)

ответ Блау предоставляет другой метод (предварительно умноженный), который, по-видимому, имеет несколько преимуществ по сравнению с этим.

ответил doppelgreener 13 AMpFri, 13 Apr 2012 10:34:26 +040034Friday 2012, 10:34:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132