【问题标题】:How to move specific ellipse to a the pointer pressed position?如何将特定椭圆移动到指针按下的位置?
【发布时间】:2014-06-23 13:40:59
【问题描述】:

我正在制作一个游戏,其中有不同的椭圆,一次我只能选择一个椭圆并将其移动到我按下指针的位置。那么我该怎么做呢? (请语法!)。

【问题讨论】:

    标签: windows windows-runtime windows-store-apps winrt-xaml


    【解决方案1】:

    您可以使用主要输入事件 - PointerMovedManipulationDelta。只需处理其中一个事件并根据您获得的信息移动椭圆。事件的sender是被拖拽的UIElement(即Ellipse)。

    如果是ManipulationDelta - 您还需要指定ManipulationMode - 例如ManipulationMode="TranslateX,TranslateY,TranslateIntertia",但是您可以在每个事件上将Ellipse 移动eventArgs.Delta.Translation.X/Y

    使用PointerMoved - 你还需要检查哪个指针移动了,它是否被按下,跟踪该指针上的PointerPressed 是否最后一次出现在你的Ellipse 上等等。我不会去那里。

    您可以使用几种方法移动UIElement

    如果它在 Grid 中 - 你可以通过设置来移动它 dx, dy

    ellipse.Margin = new Thickness(
        ellipse.Margin.Left + dx,
        ellipse.Margin.Top + dy,
        ellipse.Margin.Right - dx,
        ellipse.Margin.Bottom - dy);
    

    如果它在 Canvas 中 - 你可以像这样移动它:

    var x = Canvas.GetLeft(ellipse);
    var y = Canvas.GetTop(ellipse);
    Canvas.SetLeft(x + dx);
    Canvas.SetTop(y + dy);
    

    否则 - 如果您的椭圆有 RenderTransform - 例如TranslateTransform - 你会这样做:

    var ellipse = (Ellipse)sender;
    var tt = (TranslateTransform)ellipse.RenderTransform;
    tt.X += dx;
    tt.Y += dy;
    

    【讨论】:

    • 但是如果我先单击椭圆然后单击屏幕上的某个点,那么如何将该椭圆移动到该特定点?
    • 您可以处理Tapped 事件并通过将sender 参数转换为Ellipse 来获取椭圆。然后您将在屏幕上的其他位置处理Tapped 事件并通过调用eventArgs.GetPosition(screenElement) 获取位置。您可能还需要将状态存储在某处,以了解您是处于“椭圆”单击状态还是“屏幕”单击状态,因为您可能会在第一次单击起始椭圆后单击其他椭圆然后放置它,然后您d 想忽略这些其他事件。您也可以使用eventArgs.Handled = true 跳过某些内容。
    • eventArgs 没有 GetPosition 方法。
    • there
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    相关资源
    最近更新 更多