WPF-为什么我的项目中的keyDown函数不起作用?

问题描述

我要添加到这个游戏中:https://www.mooict.com/wpf-c-tutorial-create-a-fun-balloon-popping-game-in-visual-studio/

ColorKeyIsDown()函数,当按下某些键:Y,R,B,G,O时激活。 因此,如果按下这些键中的任何一个,将会从画布上删除一个特定的气球。 我为制作的每个新气球制作了5个可能的标签, 因为ballonSkins的整数值为1-5,所以每个数字都声明了newBallon的不同背景。

在ColorKeyIsDown()中,我想通过它们的标签来识别气球, 但这不起作用。

如何识别每个不同的气球(黄色/红色/蓝色气球)? 我可以通过气球的背景识别它吗?

*在XAML中:

 <Canvas Name="MyCanvas" Focusable="True" MouseLeftButtonDown="popBalloons" Background="White" KeyDown="ColorKeyIsDown">

    <Label Name="scoreLabel" FontSize="24" Content="score: 0" Foreground="black" FontWeight="ExtraBold" Canvas.Top="527" />

</Canvas>

*在C#代码中:

    private void ColorKeyIsDown(object sender,KeyEventArgs e)
    {
        if (gameisactive)
        {
            foreach(var x in MyCanvas.Children.OfType<Rectangle>())
            {
                switch (e.Key)
                {
                    case Key.Y:
                        if ((string)x.Tag == 3.ToString()) { MyCanvas.Children.Remove(x); score++; }
                        break;
                    case Key.R:
                        if ((string)x.Tag == 1.ToString()) { MyCanvas.Children.Remove(x); score++; }
                        break;
                    case Key.B:
                        if ((string)x.Tag == 5.ToString()) { MyCanvas.Children.Remove(x); score++; }
                        break;
                    case Key.G:
                        if ((string)x.Tag == 4.ToString()) { MyCanvas.Children.Remove(x); score++; }
                        break;
                    case Key.O:
                        if ((string)x.Tag == 2.ToString()) { MyCanvas.Children.Remove(x); score++; }
                        break;
                }
            }
        }
    }

*在gameEngine()函数的C#-中:

          // check which skin number is selected and change them to that number
            switch (balloonSkins)
            {
                case 1:
                    balloonImage.ImageSource = new BitmapImage(new Uri("pack://application:,/files/balloon1.png"));
                    break;
                case 2:
                    balloonImage.ImageSource = new BitmapImage(new Uri("pack://application:,/files/balloon2.png"));
                    break;
                case 3:
                    balloonImage.ImageSource = new BitmapImage(new Uri("pack://application:,/files/balloon3.png"));
                    break;
                case 4:
                    balloonImage.ImageSource = new BitmapImage(new Uri("pack://application:,/files/balloon4.png"));
                    break;
                case 5:
                    balloonImage.ImageSource = new BitmapImage(new Uri("pack://application:,/files/balloon5.png"));
                    break;
            }



            // make a new rectangle called new balloon
            // inside this it has a tag called bloon,height 70 pixels and width 50 pixels and balloon image as the background
            Rectangle newBalloon = new Rectangle
            {
                
                Tag = balloonSkins.ToString(),Height = 70,Width = 50,Fill=balloonImage
                
            };

解决方法

有人写道,与其在Canvas中执行KeyDown事件, 在窗口浏览器中进行操作。解决方案:onkeydown event not working on canvas?

*我更改了它,而且有效!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...