DisplayObject未在AS3中显示

时间:2010-05-19 12:40:50

标签: actionscript-3

我有这堂课:

public class IskwabolText extends Sprite {

    private var _tf:TextField;
    private var _tfmt:TextFormat;

    private var _size:Number;
    private var _text:String;

    public function IskwabolText(params:Object) {
        var defaultParams:Object = {
            color: 0x000000,
            background: false,
            backgroundColor: 0xFFFFFF,
            width: 0,
            height: 0,
            multiline: false,
            wordWrap: false
        };
        // textfield
        _tf = new TextField();
        _tf.antiAliasType = 'advanced';
        _tf.embedFonts = true;
        _tf.type = 'dynamic';
        _tf.selectable = false;
        // textformat
        _tfmt = new TextFormat();
        set(defaultParams);
        set(params);
    }

    public function get(param:String):Object {
        switch (param) {
            case 'size': return _tfmt.size;
            case 'text': return _tf.text;
            case 'font': return _tfmt.font;
            case 'color': return _tfmt.color;
            case 'background': return _tf.background;
            case 'backgroundColor': return _tf.backgroundColor;
            case 'width': return _tf.width;
            case 'height': return _tf.height;
            case 'multiline': return _tf.multiline;
            case 'wordWrap': return _tf.multiline;
            default: return this[param];
        }
        return null;
    }

    public function set(params:Object):Object {
        for (var i:String in params) {
            setParam(i, params[i]);
        }
        redraw();
        return this;
    }

    private function setParam(param:String, value:Object):Object {
        switch (param) {
            case 'size': _tfmt.size = new String(value); break;
            case 'text': _tf.text = new String(value); break;
            case 'font': _tfmt.font = new String(value); break;
            case 'color': _tfmt.color = new uint(value); break;
            case 'background': _tf.background = new Boolean(value); break;
            case 'backgroundColor': _tf.backgroundColor = new uint(value); break;
            case 'width': _tf.width = new Number(value); break;
            case 'height': _tf.height = new Number(value); break;
            case 'multiline': _tf.multiline = new Boolean(value); break;
            case 'wordWrap': _tf.multiline = new Boolean(value); break;
            default: this[param] = value; break;
        }
        return this;
    }

    private function redraw():void {
        _tf.setTextFormat(_tfmt);
        if (contains(_tf))
            removeChild(_tf);
        if (_tf.width == 0)
            _tf.width= _tf.textWidth+5;
        _tf.height = _tf.textHeight;
        addChild(_tf);
    }

}

但是当我这样做时:

public class Main extends Sprite {
   public function Main() {
      addChild(new IskwabolText({
         size: 100,
         text: 'iskwabol',
         font: 'Default', // this is properly embedded
         color: 0x000000,
         x: stage.stageWidth / 2 - this.width / 2,
         y: 140
      }));
   }
}

未显示儿童IskwabolText。发生了什么?

2 个答案:

答案 0 :(得分:0)

您已将embedFonts设置为TRUE,但我没有看到您在TextFormat中设置字体类型的位置/方式 - 将embedFonts设置为FALSE,您会看到文本已添加到显示列表中。

更新:我忽略了你确实将ffont属性设置为嵌入字体名称,只是确保你正确引用它,因为它最有可能是嵌入式字体引起的。

答案 1 :(得分:0)

文本在构造函数中设置。我只知道出了什么问题。显然,由于某种原因,宽度和高度的值为5。我修复了重绘功能以正确调整宽度和高度。好像chchrist的评论是写答案:)感谢帮助人员。