FlashPlayer10提供的3D功能有一個至關蛋疼的問題:只要設置過rotationX、rotationY或者rotationZ屬性,顯示對象裏面的文字(尤爲是設備字體,位圖文本)就會一直處於模糊狀態,即便強制將它們重置爲0也無濟於事。
除了3D旋轉之外,有時2D旋轉也會使用其它屬性。由於在Flash裏面,用rotation來旋轉會致使設備字體不可見,須要繪製成位圖才能正常旋轉。在實際應用中,此法可能會給某些需求的實現帶來不便,因此後來有大神(這位大神好像是Flash023)告訴咱們用rotationZ代替rotation便可解決問題。此法比繪製成位圖要方便多了,但因爲設置過3D的旋轉屬性,因此文字仍是難逃變模糊的命運。字體
歷史上有很多能人志士都在努力尋求解決此問題的有效方法。最先看到的一個方法是建立兩個顯示對象,一個用於3D旋轉,而另外一個不做任何3D變換,只在不旋轉的時候顯示,以確保非旋轉狀態下呈現出最清晰的文字。這時候,若是顯示對象的內容比較複雜,那麼同步它們的狀態將是一件至關痛苦的事情。code
只要在旋轉結束後執行如下這句:orm
顯示對象.transform.matrix3D =
null
;
對象
文本就能恢復原有的清晰狀態,是否是很方便呢?blog
***-------------* 源文件 *---------------***ip
/** rotate2D_mc---文本元件實例 rotate3D_mt---文本元件實例 rotate_btn----按鈕實例 */ var currentRotation:Number = 0; var rotate2D_mt:Matrix = rotate2D_mc.transform.matrix; var rotate3D_mt:Matrix = rotate3D_mc.transform.matrix; rotate_btn.addEventListener(MouseEvent.CLICK, rotateClickHandler); function rotateClickHandler(event:MouseEvent):void { rotate_btn.visible= false; addEventListener(Event.ENTER_FRAME, enterFrameHandler); } function enterFrameHandler(event:Event):void { currentRotation -= 0.2 * (currentRotation - 360); rotate2D_mc.rotationZ = currentRotation; rotate3D_mc.rotationY = currentRotation; if(Math.abs(currentRotation - 360) < 1) { currentRotation = 0; removeEventListener(Event.ENTER_FRAME, enterFrameHandler); rotate_btn.visible= true; //旋轉結束後執行這句:顯示對象.transform.matrix3D = null;文本就能恢復原有的清晰狀態。 rotate2D_mc.transform.matrix3D = rotate3D_mc.transform.matrix3D = null; rotate2D_mc.transform.matrix = rotate2D_mt; rotate3D_mc.transform.matrix = rotate3D_mt; } }