2008年7月31日 星期四

顫抖的 RectTracker

RectTracker 在一個編輯環境中是不可缺少的項目。最近,福克斯在 Flex 中企圖設計一個與 C#或 Java 一樣的 RectTracker。福克斯是採用 Mac OS X 的作業系統,就在開發的過程中,看似順利的程式,內部其實暗藏著一些問題。

就在福克斯設計好後,沒想到悲慘的事情發生了。居然福克斯寫的 RectTracker 在放大的過程中,會出現顫抖的狀態。這個情況在 C# 或是 Java 從來沒發生過。

這個顫抖的現像是這樣的:當福克斯拉動左上、或上方的 Resizing Point 時,會因為同時修改 width/height 及 x/y 導致 RectTracker 有暫時性的顫抖。這個顫抖的成因可能是,先修改了 width 後,畫面就進行更動,然後再修改 x ,導致畫面再次更動。在 C# 或 Java 中,這個問題是根本就不會出現的,因為我們可以透過 suspendLayout 或 setIgnoreRepaint 的方式,來防止暫時性的畫面變化被更新到視窗上。

跟據 Flex 3 Dev Guild 的文件,理論上這個現象不應該出現。因為, Flex 的 UIComponent 在進行 Layout 的時候,有三種不同的狀態,且會採用 delay validation 的機制。所以,福克斯也做了另一項的實驗,就是在修改 width/height 及 x/y 前加入了 trace,並於 commitProperties 的方法中加入了 trace 。結果證明,Flex 3 Dev Guild 的文件寫的是正確的。但是,為何在福克斯的 Macbook Pro 中會發生顫抖的狀態,這就不得而知了。

老實說,福克斯不是個會向命運低頭的人 。他試過了在 Windows、Linux 的 Flash Player 都沒有問題,唯一只有在 Mac OS X 的版本上才有問題。另外,他也試過 visible 、 及 includeInLayout。這些東西也都沒有帶來正面的回給。最後,在試過網路上,其它可以放大縮小的 Resizable Window 元件後,福克斯發現,這似乎是 Flash Player 本質上的問題。因為,其它的 Resizable Window 在福克斯的 Macbook Pro 也會有一模一樣的問題。

福克斯的 Mac OS X 機器為:
MacBook Pro
CPU: 2.4 GHz Intel Core 2 Duo
Ram: 2 GB 667 Mhz DDR2 SDRAM
Mac OS X: 10.5.4
Web Browser: Safari and Mozilla Firefox
Flash Player Version: Shockwave Flash 9.0 r124 

以下就是福克斯所設計的 RectTracker ,如果也有人不行的話,還煩請留言說一聲:









沒有留言: