你好,我一直试图解决这个问题一段时间了, 我希望你能够引导我朝着正确的方向前进!
我的目标是在我的wpf游戏中产生“手电筒”效果,为此,我追求了2个主要选项。
我无法使用这些选项中的任何一个,在wpf中,如果你有一个不透明蒙版,它就会显示你无法移动“穿透”该层的元素。而对于大图像方法,我无法将鼠标Point对象转换为图像的位置。下面是一些获取鼠标位置的潜在方法,我无法将图像移动到“点”位置。
指向屏幕
private void MouseCordinateMethod(object sender, MouseEventArgs e)
{
var relativePosition = e.GetPosition(this);
var point= PointToScreen(relativePosition);
_x.HorizontalOffset = point.X;
_x.VerticalOffset = point.Y;
}
为getPosition
var point = e.GetPosition(this.YourControl);
最终游戏将使用kinect进行控制,因此如果有办法使用kinect库或本机也可以选择。谢谢。
答案 0 :(得分:3)
您可以使用包含CombinedGeometry
的{{1}}的Path元素,其中包含非常大的RectangleGeometry
和排除的(因此是透明的)EllipseGeometry
,通过更改其Center
来移动鼠标输入上的属性:
<Grid MouseMove="Grid_MouseMove">
<TextBlock Text="Hello, World" FontSize="40"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Path Fill="Black">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0,0,10000,10000"/>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<EllipseGeometry x:Name="circle" RadiusX="100" RadiusY="100"/>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Grid>
MouseMove处理程序:
private void Grid_MouseMove(object sender, MouseEventArgs e)
{
circle.Center = e.GetPosition((IInputElement)sender);
}