一行代碼讓3D翻轉後的文本恢復清晰

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;
	}
	
}
相關文章
相關標籤/搜索