2012-10-05 31 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