Как вы масштабируете динамическое текстовое поле во флэш-памяти от центральной точки, используя as3? - PullRequest
0 голосов
/ 17 февраля 2010

Я пытаюсь создать текстовый эффект, при котором на каждом кадре текстовое поле увеличивается в размере и уменьшается в непрозрачности. Я использую свойства scaleX и scaleY моего динамического текстового поля, чтобы увеличить его, но он сохраняет фиксированную левую точку регистрации. Я хочу увеличить масштаб радиально наружу или с фиксированной центральной точкой. Может кто-нибудь сказать мне, как это сделать?

Ответы [ 4 ]

1 голос
/ 17 февраля 2010

Вы можете легко создать оболочку для TextField (т. Е. Sprite, содержащую TextField), чтобы обеспечить точку регистрации до середины. Если TextField является динамическим, убедитесь, что для него autoSize установлено значение LEFT. После этого вы можете просто установить позицию x/y на -textField.width*.5/-textField.height*.5. Конечно, масштабирование должно применяться к родителю.

1 голос
/ 17 февраля 2010

Прямо сейчас я делаю именно это. Я использую обертку, о которой упоминает 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);
    }
}
1 голос
/ 17 февраля 2010
 textfield.x -= textfield.width /2;
 textfield.y -= textfield.height /2;

если x и y равны 0, это поможет

0 голосов
/ 16 марта 2012

Я использовал код 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);
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...