【发布时间】:2014-06-23 13:40:59
【问题描述】:
我正在制作一个游戏,其中有不同的椭圆,一次我只能选择一个椭圆并将其移动到我按下指针的位置。那么我该怎么做呢? (请语法!)。
【问题讨论】:
标签: windows windows-runtime windows-store-apps winrt-xaml
我正在制作一个游戏,其中有不同的椭圆,一次我只能选择一个椭圆并将其移动到我按下指针的位置。那么我该怎么做呢? (请语法!)。
【问题讨论】:
标签: windows windows-runtime windows-store-apps winrt-xaml
您可以使用主要输入事件 - PointerMoved 和 ManipulationDelta。只需处理其中一个事件并根据您获得的信息移动椭圆。事件的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 跳过某些内容。