Question

L'application: Je suis en train d'écrire un petit jeu qui enseignerait à l'utilisateur de lire les notes de musique. Le jeu est très simple. L'application displayes une note et ma petite fille (utilisateur cible) doit appuyer sur la touche du clavier émulé sur l'interface graphique correspondant WinForm à la note. Elle a 1 minute pour obtenir autant de bons coups de ce qu'elle peut. Réussites et les échecs comptés.

La tâche: Comme elle frappe une bonne / mauvaise touche du clavier, je veux confirmer immédiatement si elle avait raison ou tort sans interrompre le jeu . Mon plan est de montrer un OK ou un bitmap ECHEC qui disparaît peu à peu et devient complètement transparent à l'intérieur à 2 secondes. Fading le bitmap out est une belle façon d'encourager l'utilisateur à se concentrer sur la prochaine note et ne pas se soucier du résultat précédent plus.

La question technique: Comment puis-je afficher une image bitmap sur un formulaire Windows avec la transparence? Ou avez-vous alternative non-intrusive, facile à mettre en œuvre des idées sur le laisser savoir utilisateur du bon / mauvais choix actuel?

Était-ce utile?

La solution

Comme le dit dylantblack, WPF vous donne de meilleurs outils pour le faire. Si vous choisissez d'utiliser les formulaires Windows, voici une approche simple à l'aide d'une minuterie qui se fane à l'image. Mettre en place une minuterie avec ce que la fréquence que vous souhaitez. Démarrez la minuterie, incrémenter alpha à chaque fois à travers, et d'en tirer blanc ou quelle que soit la couleur de votre formulaire est avec l'augmentation de la valeur du canal 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();
    }
}

Autres conseils

Dans WinForms vous aurez besoin d'utiliser des minuteurs ou quelque chose pour animer l'opacité du contrôle OK ou ECHEC pour le rendre fade out, ou faire quelque chose de similaire en utilisant GDI + pour dessiner manuellement.

Si vous utilisez .NET 3.5 de toute façon, je vous recommande d'utiliser WPF, ce qui est beaucoup plus facile pour faire ce genre de chose.

À titre d'exemple, vous pouvez jeter un oeil à l'application Scott Hanselman de Smash bébé, qui est ouvert source et a un concept similaire de choses dans la décoloration et à l'extérieur.

scroll top