2010-02-16 67 views
0

我試圖使文本效果在每一幀文本字段增加大小和不透明度下降。我使用我的動態文本字段的scaleX和scaleY屬性來放大,但是這樣做是爲了保持左註冊點的固定。我想讓它沿徑向向外擴大,或者固定中心點。誰能告訴我如何做到這一點?如何使用as3從中心點在Flash中縮放動態文本字段?

回答

1

可以容易地創建用於TextField的包裝(即含有TextField一個Sprite)執行註冊點到中間。如果TextField是動態的,請確保它的autoSize設置爲LEFT。此後,您可以將其x/y位置設置爲-textField.width*.5/-textField.height*.5。當然,縮放應該應用於父級。

+0

把它放在雪碧中,並將註冊點設置到中間位置對我來說是最簡單的修復方法。感謝所有偉大的答案! – Mattk

1
textfield.x -= textfield.width /2; 
textfield.y -= textfield.height /2; 

如果x和y是0,這將有助於

+1

我會''1'而不是'/ 2',所以你不會因爲在一個分數像素混亂的抗鋸齒。這就是說,因爲他無論如何都會調整它,可能無所謂。 –

1

我現在正在做的非常精確。我正在使用Theo.T提到的包裝。

這是我的代碼(大部分):

private function drawText(str:String, size:int = 16, px:int = 0, py:int = 0):void { 
    var mc:MovieClip = new MovieClip(); 
    var tf:TextFormat = new TextFormat("Verdana", size, _textcolor); 
    tf.align = "center"; 
    var _txt:TextField = new TextField(); 
    _txt.embedFonts = true; 
    _txt.wordWrap = true; 
    _txt.selectable = false; 
    _txt.autoSize = TextFieldAutoSize.CENTER; 
    _txt.antiAliasType = "advanced"; 
    _txt.defaultTextFormat = tf; 
    _txt.width = _textwidth; 
    _txt.text = str; 
    _txt.x = -_txt.width/2; 
    mc.scaleX = mc.scaleY = _scalemin; 
    mc.x = px; 
    mc.y = py; 
    mc.addChild(_txt); 
    addChild(mc); 
    startMove(mc); 
} 

private function moveText(e:Event):void { 
    var mc:MovieClip = MovieClip(e.target); 
    if (mc.scaleX >= _scalemax) { 
     mc.scaleX = mc.scaleY = _scalemax; 
    } else if (mc.y > _ymin) { 
     mc.scaleX = mc.scaleY *= _scalegrow; 
    } 
    if (mc.alpha <= 0.1) { 
     mc.removeEventListener(Event.ENTER_FRAME, moveText); 
     mc.parent.removeChild(mc); 
    } 
} 
0

我使用的代碼MGA上面貼和它的作品。我在這裏發佈整個事情,因爲我花了一點時間才弄清楚要做什麼。我注意到的是我不需要嵌入字體來使它起作用。我想知道爲什麼?無論如何,這對我的作品:

package { 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.text.TextField; 
import flash.text.TextFieldAutoSize; 
import flash.text.TextFormat; 

public class LearningScrollingMain extends MovieClip { 
    private var _scalemax:Number = 20; 
    private var _ymin:Number = 10; 
    private var _scalegrow:Number =1.05; 
    private var _scalemin:Number=1; 

    public function LearningScrollingMain() { 
     drawText("The quick brown fox jumps over the lazy dog", 24, 400, 200); 
    } 

    private function drawText(str:String, size:int, px:int, py:int):void { 
     var mc:MovieClip = new MovieClip(); 
     var tf:TextFormat = new TextFormat(); 
     tf.align = "center"; 
     tf.size=size; 
     var _txt:TextField = new TextField(); 
     _txt.defaultTextFormat=tf; 
//  _txt.embedFonts = true; 
     _txt.wordWrap = false; 
     _txt.selectable = false; 
     _txt.autoSize = TextFieldAutoSize.CENTER; 
     _txt.antiAliasType = "advanced"; 
     _txt.text = str; 
     _txt.x = -_txt.width/2; 
     _txt.y = -_txt.height/2; 
     mc.scaleX = mc.scaleY = _scalemin; 
     mc.x = px; 
     mc.y = py; 
     mc.addChild(_txt); 
     addChild(mc); 
     startMove(mc); 
    } 

    private function startMove(mc:MovieClip):void { 
     mc.addEventListener(Event.ENTER_FRAME, moveText); 
    } 

    private function moveText(e:Event):void { 
     var mc:MovieClip = MovieClip(e.target); 
     if (mc.scaleX >= _scalemax) { 
      mc.scaleX = mc.scaleY = _scalemax; 
     } else if (mc.y > _ymin) { 
      mc.scaleX = mc.scaleY *= _scalegrow; 
     } 
     if (mc.alpha <= 0.1) { 
      mc.removeEventListener(Event.ENTER_FRAME, moveText); 
      mc.parent.removeChild(mc); 
     } 
    } 
} 
} 
相關問題