我正在寻找一种方法来扩展已经在Flash(AS3)舞台上的TextField 像这样的东西:

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

我在舞台上放置了一个实例名为“thetextfield”的TextField。现在我想告诉flash这个textfield是ChildTextField类型。所以在我的Document Class中,我将textfield声明为ChildTextField:

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

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

有帮助吗?

解决方案

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

编辑:有一种黑客方式。来源: http://board.flashkit.com/board/存档/ index.php的/叔738887.html

  

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

     

除了以外,所有as3解决方案都很棒   对于两件事:首先,它发生在   运行时而不是构建时。那   意味着有一个小而实际的部分   电影没有的时间   正确初始化。其次,确实如此   如果有多个,那就不好玩了   电影中的帧。基本的想法是   检测您想要的TextField   改变,建立东西来取代它们   用,然后在舞台上更换它们。您   可以通过扩展来做到这一点   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脚本   迭代选定的项目,和   如果是文本字段,则转换为   符号与您的新基类   包装类。这具有优点   它发生在作者时间,并且   像position,instancename和   其他的东西是自动的   保存。它有缺点   那个jsfl有点烦人   怪癖要解决。

     

编辑:当然,如果这只是一个   单部电影,你可以放弃   jsfl转换器脚本,就这么做   用手。转换为符号 - &gt;包装纸   基类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top