我正在使用java2d绘制一个简单的图形,当我通过为每个对象/形状调用contains(MousePoint)实现拾取时,这可以工作但线性扩展。
在java2d中选择一种更有效的方法吗?
答案 0 :(得分:4)
是的,尽管这个空间的答案太长了。
首先,除非你有批次的节点,否则线性很可能会很好,你不应该改变任何,除非已经看到性能受到影响。
其次,你想要的是应用某种层次分解,例如quadtree。这是一种使用更多内存(更多时间预先,在搜索期间摊销)的方式,以消除在所谓的“广泛阶段”中考虑的项目。网上的一些勤奋将有助于克里斯特·埃里克森的书“Real-Time Collision Detection”。
答案 1 :(得分:1)
只要您选择区域形状(矩形,圆形),它就应该使用contains()方法。只有一个陷阱,以防你有重叠的形状,你指向一个形状实际重叠的地方。但这是一个要求的问题,是否要选择所有形状,顶部的形状或您在集合中找到的第一个形状。
如果要选择Line2D类型形状,则contains()方法将不起作用。它们没有区域,因此contains()方法始终返回false。但已经有solution on SO for this problem。