2010-02-23 80 views
0

我在ActionScript 3中構建了一個簡單的白板應用程序。ActionScript中的大多數白板或繪畫應用程序都傾向於使用間隔,計時器,mouseMove事件或enterFrame事件來跟蹤鼠標位置,並在兩者之間繪製線條或畫筆跟蹤點。如何才能爲白板應用程序實現平滑的繪製曲線?

我想要實現的是像Photoshop一樣的程序可以在使用畫筆工具繪畫時呈現的漂亮的平滑畫線。在Photoshop中,無論您在畫布周圍移動鼠標的速度有多快,畫線總會以光滑的弧形邊緣結束。在我的應用程序中,使用前面提到的任何方法,在將畫筆渲染到舞臺上的函數調用之間總是存在等待時間。因此,以循環方式快速移動鼠標時,使用這些技術中的任何一種都可能導致尖銳的角線。

這對我來說並不令人意外,我只是不知道如何才能實現像Photoshop的畫筆工具這樣更流暢的線條。請注意,我的應用程序的畫筆大多基於形狀,不能或不能使用繪圖API繪製連續的線條。換句話說,graphics.curveTo()不是一個選項。我還將由畫筆生成的Sprites或Shapes渲染到BitmapData實例。

回答

0

我的解決方案最終是兩種技術的結合。我最終做的是在刷子被使用/着色時顯示路徑的預覽。在發生這種情況時,我正在收集間隔之間的所有點。然後,當用戶釋放鼠標按鈕時,我使用所有收集點之間的二次貝塞爾曲線繪製更精確,彎曲的畫筆筆劃。

0

那麼,如果你不使用圖形API,你如何畫線? (你可能想看看Graphics API的lineBitmapStyle函數)。

不管繪製方法如何,我會做的是估計兩個點之間的刷子路徑,也許使用前面的點來確定路徑曲線(以及多少) 。你讀過貝塞爾曲線嗎? (http://en.wikipedia.org/wiki/B%C3%A9zier_curve

+0

我通過渲染添加到顯示列表中的精靈的位圖來繪製每個間隔的「線條」。我正在使用這種技術,因爲並非所有的畫筆都是線條,但有時卻是奇怪的形狀。 – 2010-02-24 17:18:08

+0

正確,但畫筆的路徑仍然映射​​到一條線 - 如果您繪製了這些路徑(作爲調試手段),則可能會幫助您,然後將真正的畫筆形狀的x,y值映射到此路徑。 – quoo 2010-02-24 21:26:34

+0

有人可以澄清爲什麼這是downvoted? – quoo 2010-03-26 15:39:42

-2

我認爲獲得更好結果的唯一方法就是使用更高的幀速率用於閃光燈電影。這樣每秒鐘就會有更多的檢查,這應該會使線條更加流暢。