用鼠标移动图像wpf c#

时间:2015-11-20 22:41:19

标签: c# wpf visual-studio mouse kinect

  

你好,我一直试图解决这个问题一段时间了,   我希望你能够引导我朝着正确的方向前进!

我的目标是在我的wpf游戏中产生“手电筒”效果,为此,我追求了2个主要选项。

  1. 有一个200%宽度的黑色png图像&在中心有一个洞的窗口高度,然后用鼠标移动图像
  2. 具有与窗口大小相同的黑色图像,并且具有不透明蒙版元素,该元素是圆形,通过黑色图层查看下面的内容。这个圆圈随着鼠标移动。
  3. 我无法使用这些选项中的任何一个,在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库或本机也可以选择。谢谢。

1 个答案:

答案 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);
}