首页 > 解决方案 > 为什么 scaleY=-1 不反映 AS3 代码中的文本?

问题描述

我正在尝试在 AS3 中动态创建文本,然后反映它。想到的最明显的方法是将其作为文本字段嵌入到精灵中,然后按如下方式反映精灵:

var mySprite = new Sprite();
addChild(mySprite);
charField = new TextField()
charField.text = "a"
mySprite.addChild(charField)
mySprite.scaleY = -1

使用此代码,屏幕上不会出现任何内容。如果我删除该scaleY命令,则a显示正常。我是否需要为要操作的文本启用某些属性?

标签: actionscript-3

解决方案


在 AS3 中,如果未嵌入字体,则无法像这样转换 TextField 。顺便说一下,同样适用于 TextField 的旋转。只需将 TextField 的 embedFonts 属性设置为 true 并不会这样做,因为这实际上不会嵌入字体。

尝试这个:

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

    public class Main extends Sprite
    {
        [Embed(systemFont="Arial",fontName="theFont",mimeType="application/x-font",fontWeight="normal",fontStyle="normal",advancedAntiAliasing="true",embedAsCFF="false")]
        private var theEmbeddedFont:Class;

        public function Main():void
        {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var format:TextFormat = new TextFormat();
            format.font = "theFont";
            format.size = 44;

            var mySprite:Sprite = new Sprite();
            addChild(mySprite);
            var charField:TextField = new TextField();
            charField.defaultTextFormat = format;
            charField.embedFonts = true;
            charField.autoSize = TextFieldAutoSize.CENTER;
            charField.wordWrap = false;
            charField.text = "a";
            mySprite.addChild(charField);

            mySprite.x = mySprite.y = 100;
            mySprite.scaleY = -1;
        }
    }
}

推荐阅读