2012-10-05 35 views
0

我试图在同一个Sprite.graphics范围内绘制多个形状,似乎无法找到任何合理的解决方案,我的问题。AS3 - drawPath()&缠绕重叠产生奇怪的行为

请注意,我一直在使用drawPath()方法来处理性能问题:我可以对blendmodes使用多个形状,但是我希望避免这种情况,并将性能降至最低。

我一直在试验drawPath()方法的绕组参数,但我不明白的一件事是绕组方向是如何由Flash定义的,所以这里是第一个问题,问题: 是否考虑了点坐标?或者是定义方向的生产线之间的角度?

这就是说,这是我的实际问题: 我想绘制一个形状,从一个矩形在一条线上的投影 - 想象一个窗口和穿过它的光线,然后击中地板。

enter image description here

为了实现这个目标,我必须考虑到的是,lightsource位置可以有所不同,有什么样的结果:

enter image description here

这里对第二张照片,你已经可以看到我正面临的问题。为了绘制我的形状,我已经分别“绘制”(理解:将数字放在我的坐标向量中)我的身材的不同部分:我想要投影的实际矩形,从左侧投射的光,光线从底部投射,从右侧投射光线。

我一直试图从左上角开始小心保持每个部分的绕线方向相同,但是在我的推理中似乎有些问题,因为每次中心部分都与任何侧面部分重叠,那里的形状被清空,并且每当双方部分重叠时,发生同样的情况。

正如我写在这里,一些启示突然罢工了我,现在我想,也许我所有点在我的坐标向量必须在相同的缠绕方向被分类为我的造型工作?... (而不仅仅是我在脑海中分开绘制的小部分^^)

如果我是对的(如果我不是,请纠正我,或者我已经理解错了什么?) ,这意味着我必须:

  • 排序我的要点放置在正确的绕组方向(可能是复杂的东西, ld导致一些奇怪的绘制形状一旦提供给绘图API?)

  • 只从最外部点绘制形状,取决于形状的实际形状(可能更复杂,我目前期望的东西)。

任何人都可以在这里确认或体弱我最后的设想,给我有什么可以怎么回事线索,如何解决呢?...

非常感谢:-)

+1

不确定你的具体问题,但想知道你是否已经阅读过关于控制绕组的文档...可能会有所帮助,但也许你已经通过它http://help.adobe.com/en_US/ ActionScript 3.0编程AS3/WS1EE3740D-F65C-43bf-9B12-74E34D7D1CBE.html – shaunhusain

+0

更确切地说,'GraphicsPathWinding.NON_ZERO'是你需要为你的填充样式设置的。其实,我会用两层做你想做的,顶层包含光线,底层包含窗口。你将不得不使用BlendMode来获得所需的效果。 – Vesper

+0

感谢您的答案,但实际上我已经浏览了文档,并且还使用了GraphicsPathWinding.NON_ZERO参数,但结果不会做出我想要的结果......在文档中,没有说明绕组方向实际上是定义的,它只表示“渲染器解释坐标的顺序”。但是,这是由前两组坐标定义的方向,在解析矢量时不断重新定义......?我宁愿只使用单一的形状,而不是使用BlendModes来实现这一点,但我仍然不能确切的形状,因为我想... – elFlashor

回答

1

你想拥有组成了三个投影仪系一个形状?好的,你已经确定了两个低点的位置,并且你有4个点的窗口。然后,您构建一个如下列表:

  • 最上面的两点总是在列表中,因为您写道,光线总是会掉出窗外。因此,把0放在命令中,窗口的左上角坐标放入路径,1放入命令(lineTo),窗口的右上角放入路径。
  • 现在,如果两个楼层点的X都小于窗口的右下角,则将窗口的点添加到路径中!
  • 然后,您添加最右边的地板点,然后最左边。
  • 然后,如果两个楼层点的X都大于窗口的左下角,则将其添加到列表中。

你完成了。而且你不再需要3个投影,你只计算最下面的一个(它会给你两个点),并制作你的列表。应该做。请给出意见。

+0

啊哈,没有通过这样的解决方案.. 。我深深地想着一个完整的解决方案,我没有尝试过其他任何东西......即使它更简单!我要去尝试一下,我必须迫使我不要总是制造最“优雅”的解决方案,而是选择最有效的解决方案:-) – elFlashor

+0

谢谢你,现在它的工作......我仍然想要知道(主要是为了教育目的^^)Flash的绕线方向是如何计算的,但我设法做我想做的事......谢谢! – elFlashor