碰撞检测Xamarin.Forms

时间:2018-08-05 18:14:30

标签: c# xamarin.forms collision

我正在尝试检测两个Xamarin之间的冲突。窗体控件(BoxViews),但是我找不到一种方法。我有一个按钮,它的作用是减少BoxView的TranslationY,直到它与另一个BoxView碰撞为止。我记得用WinForms可以用IntersectsWith来完成,但是显然这里不起作用,我现在有这个:

func_get_args()

但这是行不通的,它永远不会检测到两个BoxView之间的冲突。

1 个答案:

答案 0 :(得分:0)

应用翻译后,边界不会更新。

来自docs

边界是在布局周期中通过调用Layout(矩形)来分配的。

我会尝试

  1. 使用您要将BoxView转换为的新位置调用Layout
  2. 为pjOne和pjTwo创建一个矩形。然后,您可以使用Xamarin.Forms.Rectangle.IntercectsWith方法。

以下是未经测试的示例:

var pjRectOne = new Rectangle(pjOne.X + pjOne.TranslationX, pjOne.Y + pjOne.TranslationY, pjOne.Width, pjOne.Height);
var pjRectTwo = new Rectangle(pjTwo.X + pjTwo.TranslationX, pjTwo.Y + pjTwo.TranslationY, pjTwo.Width, pjTwo.Height);
if (pjRectOne.IntercectsWith(pjRectTwo))
{

}

注意:如果pjOne或pjTwo是视图的子级,则它们的X和Y位置将相对于父级。要获得绝对的X和Y,请loop through all their parents通过执行类似的操作

var y = pjOne.Y; 
var parent = pjOne.ParentView; 
while (parent != null) 
{ 
    y += parent.Y; 
    parent = parent.ParentView; 
} 

希望这对您有所帮助:)