我一直忙于为我前一段时间写过的类文件构建UI。
我遇到的问题是引用TimeLine上的符号。所有符号都有一个实例名称,并且只存在于第一帧中(主时间轴只有一帧)。
目前我正在使用
从时间轴图层实例化我的AS3类文件import circles.Spirograph;
var circles:Spirograph = new Spirograph(stage);
所以我在我的类文件中引用了一个阶段。
如果我在名为sb1
的舞台上有库ScrollBar,那么如何在类文件中访问它,以及如何获取其值?
答案 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以了解简单的实施,但比我发布的内容更完整。