我正在使用 GWT Canvas (Java) 创建某种绘图/流程图/UML 图表之类的工具。 对于我的绘图的命中检测,我可以想象 3 种不同的策略,但我不知道哪一种最适合我的目标。
- 只需跟踪所有形状坐标并在鼠标单击时迭代所有对象
- 通过鼠标点击在幽灵 Canvas 上绘制所有对象,并在每次对象绘制后使用 isPointInPath()
- 使用幽灵 Canvas 并用自己的颜色绘制每个对象(如#000001、#000002),并在 map 中保留它们的引用。然后只需检测ghost-canvas上的鼠标点击并获取属于鼠标下的pixelcolor的对象
您更喜欢什么,为什么?
最佳答案
我认为第一种方法是最好的,
您很可能会保留对形状的引用(即,当您想要移动或调整显示对象的大小时),因此您需要做的就是实现额外的方法 boolean isIn(Point mouseclick,Shape shape)
(因为每种类型的对象的 if 实现可能不同,如果将它放在 Shape 上会更好)
我不确定你希望 Ghostcanvas 如何工作,但恕我直言,绘制任何额外的东西听起来像是对资源的巨大浪费。
您的第三个策略将需要从图像/ Canvas 中获取原始像素,这可能是昂贵的操作
关于java - GWT Canvas 的命中检测 - 绘图的哪种策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13970955/