用鼠标移动图像 wpf c#
Move image with mouse wpf c#
Hello, I have been trying to work this problem out for some time now,
I hope that you are able to lead me in the right direction!
我的目标是在我的 wpf 游戏中产生 "flashlight" 效果,为此我采用了 2 个主要选项。
- 有一个黑色 png 图像,其宽度和高度为 window 的 200%,中间有一个洞,然后用鼠标移动图像
- 有一个 window 大小的黑色图像,并有一个圆形的不透明遮罩元素,可以透过黑色图层看到下面的内容。这个圆圈随鼠标移动。
我无法使这些选项中的任何一个起作用,在 wpf 中,当您有不透明蒙版时,您似乎无法移动作为 "punching through" 图层的元素。而对于大图像方法,我无法将鼠标点对象转换为图像的位置。以下是获取鼠标位置的一些潜在方法,我无法将图像移动到 "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;
}
获取位置
var point = e.GetPosition(this.YourControl);
最终游戏将使用 kinect 进行控制,因此如果有一种方法可以使用 kinect 库或本机实现,那也是一种选择。谢谢。
您可以使用具有 CombinedGeometry
的路径元素,该元素由非常大的 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);
}
Hello, I have been trying to work this problem out for some time now, I hope that you are able to lead me in the right direction!
我的目标是在我的 wpf 游戏中产生 "flashlight" 效果,为此我采用了 2 个主要选项。
- 有一个黑色 png 图像,其宽度和高度为 window 的 200%,中间有一个洞,然后用鼠标移动图像
- 有一个 window 大小的黑色图像,并有一个圆形的不透明遮罩元素,可以透过黑色图层看到下面的内容。这个圆圈随鼠标移动。
我无法使这些选项中的任何一个起作用,在 wpf 中,当您有不透明蒙版时,您似乎无法移动作为 "punching through" 图层的元素。而对于大图像方法,我无法将鼠标点对象转换为图像的位置。以下是获取鼠标位置的一些潜在方法,我无法将图像移动到 "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;
}
获取位置
var point = e.GetPosition(this.YourControl);
最终游戏将使用 kinect 进行控制,因此如果有一种方法可以使用 kinect 库或本机实现,那也是一种选择。谢谢。
您可以使用具有 CombinedGeometry
的路径元素,该元素由非常大的 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);
}