AS3 Inspectable Font Chooser

时间:2013-02-04 14:21:58

标签: actionscript-3 flash-component

我正在构建一个组件,需要能够从字体列表中选择字体。我有字体列表显示,但我不确定正确的数据类型是什么或我应该如何设置它。我尝试过String和Font,但我似乎遇到了错误。

private var _tfFormat:TextFormat;
_tfFormat = new TextFormat();

这将产生一个1067:类型String的隐式强制到不相关的flash.text:Font。

private var _font:Font = null;
_tfFormat.font = font.fontName;
[Inspectable(type="Font Name", name="font", defaultValue="Arial")]
public function get font():Font 
{
    return _font;
}

public function set font(value:Font):void 
{
    _font = value;
    invalidate();
}

这给了我1065变量未定义。

private var _font:String = "";

var __cls:Class = getDefinitionByName(font) as Class;
var __fnFont:Font   = new __cls() as Font;              
_tfFormat.font  = __fnFont.fontName;

[Inspectable(type="Font Name", name="font", defaultValue="")]
public function get font():String 
{
    return _font;
}

public function set font(value:String):void 
{
    _font = value;
    invalidate();
}

我觉得我非常接近,而且我很容易忽视它。任何一双眼睛都会受到赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题。

我将字体的数据类型更改回String。事实证明,如果使用嵌入字体,Flash会在名称中添加星号;例如:ArialBold *但该星号的链接标识符中不包含该星号。所以在我的setter中我删除了星号,然后正常地从字符串创建一个类。这是(缩短的)代码。

如果有更好的方法,我仍然都是耳朵。 :)

private var _font:String = "";
private var _tfFormat:TextFormat;
_tfFormat = new TextFormat();
var __cls:Class = getDefinitionByName(font) as Class;
var __fnFont:Font = new __cls() as Font;
_tfFormat.font = __fnFont.fontName;

[Inspectable(type="Font Name", name="font", defaultValue="")]
public function get font():String 
{
    return _font;
}

public function set font(value:String):void 
{
    _font = value.split("*").join('');
    invalidate();
}