如何从AS3类文件中引用手动绘制的符号?

时间:2011-05-02 17:25:36

标签: flash actionscript-3

我一直忙于为我前一段时间写过的类文件构建UI。

我遇到的问题是引用TimeLine上的符号。所有符号都有一个实例名称,并且只存在于第一帧中(主时间轴只有一帧)。

目前我正在使用

从时间轴图层实例化我的AS3类文件
import circles.Spirograph;
var circles:Spirograph = new Spirograph(stage);

所以我在我的类文件中引用了一个阶段。

如果我在名为sb1的舞台上有库ScrollBar,那么如何在类文件中访问它,以及如何获取其值?

2 个答案:

答案 0 :(得分:1)

有几种方法。如果Spirograph是DisplayObject,它将具有“root”属性。您可以将此属性强制转换为MovieClip,然后访问sb1:

// somewhere inside your class
var mainTimeline:MovieClip = MovieClip(root);

trace(maintTimeline.sb1)

另一个选择是将“this”传递给Spirograph构造函数,因为你在时间轴上实例化,“this”指的是时间轴:

var circles:Spirograph = new Spirograph(this);

那么你的阶段变量可以这样获得:

private var _stg:Stage;
public function Spirograph(main:MovieClip){

   _stg = main.stage;

   // get at sb1
   trace(main.sb1);

}

还有一些方法,但这些方法最常见。

答案 1 :(得分:1)

好吧,不确定我是否完全理解你的设置以及你想如何使用它......

我的理解是你在主时间轴中拥有所有的ui符号,然后,你有一个类Spirograph,其中包含逻辑并需要符号来引用它们。我是对的?

遵循您的结构的快速解决方案是设置Spirograph,以便期望包含所有ui资产的DisplayObject。然后,从初始化方法中按名称访问所需的实例。

import circles.Spirograph;
var circles:Spirograph = new Spirograph( this as DisplayObject);

然后,在Spirograph中

public function Spirograph(skin:DisplayObject ){
   _skin = skin;
   if(_skin.stage) _init();
   else _skin.addEventListener(Event.ADDED_TO_STAGE,_init);
}
protected function _init(e:Event = null):void{
   if(e) e.removeEventListener(e.type,arguments.callee);
   _scrollbarUi = _skin.getChildByName("sb1") as Sprite;
...
}

您可以查看this answer以了解简单的实施,但比我发布的内容更完整。

相关问题