Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Path2D.intersect()与Area.intersect()类似_Java_Area_2d Games_Intersect_Path 2d - Fatal编程技术网

Java Path2D.intersect()与Area.intersect()类似

Java Path2D.intersect()与Area.intersect()类似,java,area,2d-games,intersect,path-2d,Java,Area,2d Games,Intersect,Path 2d,我曾经使用过Area.intersect(),并想知道是否有一种方法可以创建一个类似于使用Path2D的方法,因为我注意到当使用Path2D作为形状时,会出现性能提升。换言之,获取大Path2D的一部分,然后从该部分创建较小的Path2D 地图绘制 在游戏视图中 注意:使用下面的hashmap a,我根据每个“对象”将平铺形状渲染到查看区域,在这种情况下,这些对象将是不同的图像类型:海洋、草、黑曜石、岩石、沙子和泥土 LinkedHashMap<Point, LinkedHashMap&

我曾经使用过Area.intersect(),并想知道是否有一种方法可以创建一个类似于使用Path2D的方法,因为我注意到当使用Path2D作为形状时,会出现性能提升。换言之,获取大Path2D的一部分,然后从该部分创建较小的Path2D

地图绘制 在游戏视图中

注意:使用下面的hashmap a,我根据每个“对象”将平铺形状渲染到查看区域,在这种情况下,这些对象将是不同的图像类型:海洋、草、黑曜石、岩石、沙子和泥土

LinkedHashMap<Point, LinkedHashMap<Object, Path2D.Double>>
LinkedHashMap

编辑:每种图像类型都有一个自己的完整地图区域,它是10000px x 1000000px。相交的我的分片是100px x x 100px,作为Path2D的给定类型,逐点推送到链接的散列图中。双击并通过当前查看区域中的点渲染到屏幕上。

不清楚您使用的是哪个SDK提供了Area.intersect()。但是,要确定与路径相交的对象,这可能是一个复杂的问题-请注意,与多边形相交的path2D可能会变成多条路径

但是,有一些已知的算法用于将路径与多边形相交,例如或

我在Java中找到了Cohen Sutherland的以下代码:

虽然您可能需要将代码提取到一个更有用的函数中,但这似乎还可以。Cyrus Beck可能是更好的选择,尽管我只能找到伪代码:


一旦实现了这两种方法,您需要将其应用于路径中的每一条线,以获得与正方形相交的线的新列表。

仅由
区域
类添加“构造实体几何体”功能。你应该更清楚地说出你注意到“性能提升”的地方。但请注意,在任何情况下,都可以通过调用
Path2D p=new Path2D.Double(),对
Area
对象执行所需的操作,然后将区域转换为
Path2D
;p、 追加(area.getPathIterator(null,1.0f))@Marco13多亏了你最后的回答,我在游戏中更多地研究了平铺,从纹理绘制到使用图像的变化是巨大的。我还根据图像类型大致平铺了每个形状。我将编辑我的帖子,包括一张演示我的方法的图像。@Marco13有点粗糙;)但我不得不使用油漆,因为我必须重新下载GIMP。这些图片并没有让它变得更清晰。也许您应该更详细地描述何时何地执行交叉点并绘制形状。@Marco13在加载游戏之前,我最初正在执行交叉点,但加载时间太长,因此我已切换到区域渲染。您看到的每个红色平铺都与地图大小区域的一部分相交,我在这里为每种图像类型调用Area.intersect()。我将重新发布一张不同的图像,以演示每个形状的交点。是否有这些算法中的一种在web上可用的java实现,因为我搜索了但找不到?另外,我将它与一个不规则的大Path2D对象相交,如果这样做更简单:)。我用一些链接更新了答案-我恐怕找不到直接的实现,也没有正在运行的实现。。。