Затухание изображения с прозрачностью в WinForms UI (.NET3.5) - PullRequest
6 голосов
/ 07 июня 2009

Заявка: Я пишу небольшую игру, которая научит пользователя читать ноты. Игра очень проста. Приложение отображает заметку, и моя маленькая дочь (целевой пользователь) должна нажать клавишу эмулируемой клавиатуры в графическом интерфейсе WinForm, соответствующую заметке. У нее есть 1 минута, чтобы получить как можно больше удачных хитов. Успехи и неудачи учитываются.

Задание: Когда она нажимает на хорошую / плохую клавиатуру, я хочу немедленно подтвердить, была ли она права или нет , не прерывая игру . Мой план - показать растровое изображение OK или FAILED, которое постепенно исчезает и становится полностью прозрачным в течение ~ 2 секунд. Исчезновение растрового изображения - хороший способ побудить пользователя сосредоточиться на следующей заметке и больше не беспокоиться о предыдущем результате.

Технический вопрос: Как отобразить растровое изображение в форме Windows с прозрачностью? Или у вас есть альтернативные ненавязчивые, простые в реализации идеи, позволяющие пользователю узнать о текущем хорошем / плохом выборе?

Ответы [ 2 ]

7 голосов
/ 07 июня 2009

Как говорит dylantblack, WPF предоставляет вам лучшие инструменты для этого. Если вы решите использовать формы Windows, вот простой подход с использованием таймера, который затемняет изображение. Установите таймер на любую частоту, которая вам нравится. Запустите таймер, увеличивайте альфа каждый раз и рисуйте белым или любым другим цветом вашей формы с увеличением значения альфа-канала.

int alpha = 0;

...

private void timer1_Tick(object sender, EventArgs e)
{
    if (alpha++ < 255)
    {
        Image image = pictureBox1.Image;
        using (Graphics g = Graphics.FromImage(image))
        {
            Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width);
            g.DrawLine(pen, -1, -1, image.Width, image.Height);
            g.Save();
        }
        pictureBox1.Image = image;
    }
    else
    {
        timer1.Stop();
    }
}
3 голосов
/ 07 июня 2009

В WinForms вам потребуется использовать таймеры или что-то еще, чтобы анимировать прозрачность элемента управления OK или FAILED, чтобы он исчезал, или сделать что-то подобное, используя GDI +, чтобы нарисовать его вручную.

Если вы все равно используете .NET 3.5, я бы порекомендовал использовать WPF, что намного проще для такого рода вещей.

В качестве примера вы можете взглянуть на приложение Baby Smash Скотта Хансельмана, которое является открытым исходным кодом и имеет аналогичную концепцию постепенного исчезновения.

...