我是一名新的Android开发人员,正在通过GPS移动开发Tron游戏的简单转折,但我在实现玩家交叉时遇到了麻烦。
现在,我的玩家的路径是路径,我移动到坐标并在画布上画出坐标差异。
一些路径类没有提供我能找到的这种交集方法,所以我使用了区域,我已经测试了一个交叉点来处理2个常规矩形,但我不能使用Region.setPath来创建一个Region原因。根据我的理解,需要关闭路径以形成一个区域,以便创建一个区域,这不是我需要的。有没有办法在路径上创建区域,而不是路径创建的区域?即:如果路径是10px厚的直线,我该如何制作一个10px厚的线?
这是我正在做的一个简短的代码示例:
Path p1path = new Path();
p1path.moveTo(startPos,startPos);
p1path.lineTo(newPos,newPos);
p1path.moveTo(newPos, newPos);
Region p1region = new Region();
p1region.setPath(p1path, new Region(0,0,480,800); // this is where the region isn't setting as I thought it would...
// do same for p2
if(p1.quickReject(p2)) // checks for intersection
谢谢:)
答案 0 :(得分:2)
所以我很久以前就已经解决了这个问题,但是为了帮助那些最终偶然发现并想要一些类似功能的人:
这篇文章很久以前 - 所以让我记住发生了什么。
创建路径周围的区域实际上确实有效,但是对于一组非常有限的路径。我的意思是“创建一个路径周围的区域”是对于从x1,y1到x2的路径,y2创建一个矩形区域,覆盖(例如)x1-50,y1-50到x2 + 50,y2 +50其中50是Path的像素权重笔划。
如果你可以想象它,它基本上创建一个覆盖路径的矩形区域,它的50px笔划,所以你可以使用区域“伪造”路径交叉。无论路径在哪里,区域都是如此,当2路径“相交”时,您可以检查区域交叉点(您可以这样做,但我忘记了方法名称)。
然而事实证明这只适用于少数路径。虽然我想我的数学能力已经足够,但我无法理解,无论路径到哪个方向,地区都能奏效。不同的角度,不同的方向等导致区域在路径下没有正确绘制。我上面使用50行程宽度的例子只适用于特定方向。
我的伙伴和我偶然发现的解决方案是创建一个映射到屏幕上的2D整数数组。无论路径进入某个方向,我们都会使用特定值(1)填充Path映射到的每个数组单元格。我们会对其他路径执行相同操作,但使用不同的值(2)。您进行的每次移动都会根据路径坐标检查2D数组,看它是否已被占用。有一个重要的数学公式可以推断当你从x1,y2到x2,y2时被访问过的细胞被证明是非常有用的 - 我相信它被称为Brasenheim公式中的某种东西,或者什么。
这不是最优雅的解决方案,但它最终伪造了路径交叉点。如果有人对更好的解释感兴趣,你可以给我留言。
祝你好运!