7

应用程序: 我正在编写一个小游戏,可以教用户阅读音符。游戏玩法非常简单。该应用程序显示一个便笺,我的小女儿(目标用户)应该在 WinForm GUI 上按与该便笺匹配的模拟键盘键。她有 1 分钟的时间来获得尽可能多的好击。成功和失败都被计算在内。

任务: 当她敲击键盘的好/坏键时,我想立即确认她是对还是错,而不会打断游戏。我的计划是显示一个 OK 或 FAILED 位图,该位图逐渐淡出并在约 2 秒内变得完全透明。将位图淡出是鼓励用户专注于下一个音符而不是再为之前的结果烦恼的好方法。

技术问题: 如何在 Windows 窗体上显示具有透明度的位图?或者您是否有其他非侵入性、易于实施的想法让用户知道当前的好/坏选择?

4

2 回答 2

8

正如 dylantblack 所说,WPF 为您提供了更好的工具来执行此操作。如果您选择使用 Windows 窗体,这里有一个简单的方法,它使用一个使图像淡出的计时器。设置一个你喜欢的频率的计时器。启动计时器,每次都增加 alpha,然后绘制白色或任何您的表单颜色,增加 alpha 通道值。

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();
    }
}
于 2009-06-06T23:32:51.270 回答
3

在 WinForms 中,您需要使用计时器或其他东西来为 OK 或 FAILED 控件的不透明度设置动画以使其淡出,或者使用 GDI+ 执行类似的操作来手动绘制它。

如果您仍然使用 .NET 3.5,我建议您使用 WPF,这对于做这类事情要容易得多。

例如,您可以查看Scott Hanselman 的 Baby Smash应用程序,该应用程序是开源的,并且具有类似的淡入淡出概念。

于 2009-06-06T23:14:29.387 回答