问题描述
我要添加到这个游戏中: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?
*我更改了它,而且有效!