我刚拿到了Head First C#3rd Edition这本书。在本书的第一部分,它让您开始创建一个简单的游戏,在这个游戏中您可以制作弹跳圆圈,在点击并将“人类”拖动到安全时必须避免这些圆圈。编码涉及C#以及图形方面的XAML。除了一件事,一切都有效。如果我点击它,它将“跟随”光标而不是点击并拖动“人类”,而游戏的行为就像光标本身就是人类一样,因为那是当我击中其中一个弹跳圆圈时游戏结束的地方。我无法弄清楚我做错了什么。我已经仔细查看了本书旁边的代码.....我唯一可以弄清楚的是这段代码。
private void playArea_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (humanCaptured)
{
Point pointerPosition = e.GetCurrentPoint(null).Position;
Point relativePosition = grid.TransformToVisual(playArea).TransformPoint(pointerPosition);
if ((Math.Abs(relativePosition.X - Canvas.GetLeft(human)) > human.ActualWidth * 20)
|| (Math.Abs(relativePosition.Y - Canvas.GetTop(human)) > human.ActualHeight * 20))
{
humanCaptured = false;
human.IsHitTestVisible = true;
}
else
{
Canvas.SetLeft(human, relativePosition.X - human.ActualWidth / 2);
Canvas.SetTop(human, relativePosition.Y - human.ActualHeight / 2);
}
}
}
这本书说把人的实际宽度和高度设置为3.但如果我这样做并尝试点击实际游戏中的人,它根本就不会注册光标。但如果我把它放在20或以上,我点击人类,正如我之前所说,它开始跟随我的光标,其余的游戏表现正常。
这是应该使光标能够“点击”和“拖动”人类的代码。
private void human_PointerPressed(object sender, PointerRoutedEventArgs e)
{
if (enemyTimer.IsEnabled)
{
humanCaptured = true;
human.IsHitTestVisible = false;
}
}
这是相关的XAML代码,它应该用来点击并拖动它,而是让它跟随我在该区域的光标:
<StackPanel x:Name="human" Orientation="Vertical" Canvas.Left="17" Canvas.Top="15"
PointerPressed="human_PointerPressed" >
<Ellipse Fill="White" Height="10" Stroke="White" Width="10"/>
<Rectangle Fill="White" Height="25" Stroke="White" Width="10" />
</StackPanel>
其他一切似乎都正常。我一遍又一遍地检查了书中的代码,然后去了他们的网站。就我所知,我所做的一切都不同。如果有人可以提供帮助,将不胜感激。
答案 0 :(得分:0)
阅读书籍“Head First C#, 3rd Edition”
我会说问题不是你的代码......
更多关于他如何检测人类是否被捕获,因为他没有检查“human
”是否与“enemy
”发生碰撞他只是做了一些Pointerevent,它会在指针处获得触发器(你的鼠标)将输入“enemy
”而不是你的“human
”与他发生冲突......