Actionscript 3 AS3-检查形状是否闭合

Actionscript 3 AS3-检查形状是否闭合,actionscript-3,graphics,drawing,shape,fill,Actionscript 3,Graphics,Drawing,Shape,Fill,使用“lineTo()”绘制形状时,我需要检查绘制的线是否创建了闭合形状。 如果是这样的话,我需要用颜色填充这个形状。 有人能告诉我这是否可行,如果可以,请告诉我怎么做。 谢谢在使用lineTo之前,请致电Beginll。大概是这样的: var _s:Sprite = new Sprite(); _s.graphics.beginFill(0xFF0000); _s.graphics.lineStyle(1, 0xFFFF00); _s.graphics.lineTo(50, 0); _s.gr

使用“lineTo()”绘制形状时,我需要检查绘制的线是否创建了闭合形状。 如果是这样的话,我需要用颜色填充这个形状。 有人能告诉我这是否可行,如果可以,请告诉我怎么做。
谢谢

在使用lineTo之前,请致电Beginll。大概是这样的:

var _s:Sprite = new Sprite();
_s.graphics.beginFill(0xFF0000);
_s.graphics.lineStyle(1, 0xFFFF00);
_s.graphics.lineTo(50, 0);
_s.graphics.lineTo(50, 50);
_s.graphics.lineTo(0, 50);
_s.graphics.lineTo(0, 0);
_s.graphics.endFill();
addChild(_s);

另外,如果答案对您有帮助,请不要忘记接受。

最快的解决方案可能是在绘制路径时将路径存储为点列表,然后对照现有线段检查每个新线段是否存在交点。只要找到一个,就按以下顺序为填充绘制一个单独的循环:

  • 十字路口
  • 现有线段的第二个顶点
  • 新线段第一个顶点之前的所有中间顶点(包括该顶点)
  • 十字路口
一个潜在的问题是,如果你画几个小循环,然后围绕它们旋转,你最终会得到一个大的填充,它自身相交并与小循环重叠,这可能会导致沿边缘的渲染效果不佳


理想情况下,您可能希望创建一个添加了任何交点的路径图,然后查找不包含在另一个循环中的每个循环,但这显然有点复杂。上一个问题的答案与查找不包含其他循环的所有循环有关,这些循环可以通过组合共享边的循环进行调整:

只是想知道,如果形状没有在开始点闭合,这会起作用吗?例如,如果最后一条线穿过了第一条线的一半?谢谢Rizzla,但是,这不是每次都能填满吗?如果我画了一条我不想填充的曲线,我只想在曲线闭合形状时填充。@puggsoy是的,它会工作,但你会得到不可预测的结果。@atomicDroid在绘制之前调用endFill(),如果你不想填充下一个形状。原因是,这条线是用鼠标绘制的。我无法决定是否填充形状(如果它是一个形状而不是一条线),直到鼠标被提起。你显然可以检查最后一点是否与第一点相同,但听起来你的要求更复杂。你需要填充一行中循环回自身的部分吗,比如“e”中的循环?谢谢你回答David,但是是的,它更复杂。正是这样,填充e的顶部循环部分。