【问题标题】:How to extend a Textfield that is allready on the stage in Flash (AS3)?如何在 Flash (AS3) 中扩展已经在舞台上的 Textfield?
【发布时间】:2010-12-09 16:51:40
【问题描述】:

我正在寻找一种方法来扩展已经在 Flash (AS3) 中出现的 TextField 像这样:

public class ChildTextField extends TextField 
{
    //code for childTextField comes here    
}

我在舞台上放置了一个实例名称为“thetextfield”的 TextField。现在我想告诉flash 这个文本域是ChildTextField 类型。因此,在我的文档类中,我将该文本字段声明为 ChildTextField:

public class DocumentClass extends Sprite()
{
    public var thetextfield : ChildTextField;
}

这会引发类型强制失败错误。 是否可以像使用库符号一样更改用于 Flash IDE 中文本字段的类?

【问题讨论】:

    标签: flash actionscript-3 textfield


    【解决方案1】:

    不怕。如果要添加扩展文本字段类,则必须使用 ActionScript。

    编辑:有一种破解方法。来源:http://board.flashkit.com/board/archive/index.php/t-738887.html

    实际上,我遇到了这个确切的问题 之前的问题。就我而言,我是 尝试创建一个文本字段 其他一些其他的额外行为 非编码艺术家使用。我会告诉 你是我原来的解决方案 as3,但有一个致命的缺陷,我的 当前的解决方案,这是一个 as3 和 jsfl 的结合。

    所有 as3 解决方案都很棒,除了 两件事:首先,它发生在 运行时而不是构建时。那 意味着有一小部分但真实的部分 电影不在的时间 正确初始化。其次,确实 如果有多个就玩不好 电影中的帧。基本思想是 检测你想要的 TextFields 改变,建造东西来取代它们 ,然后在舞台上替换它们。你 可以通过扩展来做到这一点 TextField,或构建一个类 包含一个 TextField 并处理 与它的接口。假设你是 做第一个。添加构造函数到 SmartTextField 复制所有 您关心的领域:

    public function SmartTextField(TextField tf)
    {
    this.text = tf.text; //continue with copy of anything relevant. 
    }
    

    在您的主要电影中有代码 检测并替换 TextFields 你想换

     var toreplace:Array = findTextFields(); 
     var tf:TextField;
     var stf:SmartTextField; 
     var where:int;
     for (int i = 0; i < toreplace.length;i++)
     { tf = TextField(toreplace[i]);
       stf = new SmartTextField(tf); 
       where = getChildIndex(tf); 
        addChildAt(stf,where); 
        removeChild(tf); 
     }
    

    这很好用,除了点 以上。

    JSFL 解决方案有点过于复杂 详细介绍,但这里是 基本。有一个包装的 as3 类 具有您的新行为的文本字段 想。编写一个jsfl脚本 迭代选定的项目,并且 如果是文本字段,则转换为 带有新基类的符号 包装类。这有好处 它发生在作者时间,并且 诸如位置、实例名称和 其他东西是自动的 保存。它有缺点 那个jsfl有很多小烦人 需要克服的怪癖。

    编辑:当然,如果这只是为了 单部电影,你可以放弃 jsfl 转换器脚本,只需执行此操作 用手。转换为符号 -> 包装器 基类。

    【讨论】:

    • 感谢您提供的所有有用信息艾伦,我认为就我的目的而言,最简单的方法是创建一个包含文本字段的包装器类,并将功能添加到包装器而不是文本字段。我认为能够在未来的 Flash 版本中更改所有舞台对象的基类将是一个不错的功能。也许在 CS5 ....
    • 是的,这是个好主意 :)。希望 CS5 提供一些补充和改进。
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2013-11-25
    • 2015-07-15
    • 2016-06-23
    • 2010-10-09
    • 2013-06-05
    相关资源
    最近更新 更多