如何从子 Slider 影片剪辑访问父项中定义的对象

Posted

技术标签:

【中文标题】如何从子 Slider 影片剪辑访问父项中定义的对象【英文标题】:How to access object defined in parent, from child Slider movieclip 【发布时间】:2012-09-30 13:49:32 【问题描述】:

这是我的应用结构:

parent->[slider->[movieClip1,movieClip2,movieClip3]]

所以我基本上在 Slider 组件中有一些影片剪辑。 现在我在父时间线中定义了一个对象

var myObj:Object = new Object();... 

我想从 Slider 组件中的movieClip1 访问这个对象。 我试过了:

trace(MovieClip(this.parent).myObj.A_function_in_the_object());

哪些输出:

TypeError:错误 #1034:类型强制失败:无法转换 fl.controls::BaseButton@222082e1 到 flash.display.MovieClip。在 SliderTrack_skin/frame1()

trace(parent.myObj.A_function_in_the_object());

哪些输出:

1119: 通过引用访问可能未定义的属性 myObj 具有静态类型 flash.display:DisplayObjectContainer。

如何从子影片剪辑访问在父时间轴中定义的对象?

【问题讨论】:

【参考方案1】:

由于 Flash 组件的结构很复杂,this.parent 并不总是返回您期望的类。所以,如果你想访问父对象,你应该使用while循环而不是“this.parent.parent.parent ...”。

像这样。

var obj: Object = this;
while (obj.parent != null) 

    obj = obj.parent;

    // If "obj" is the class you expected, stop loop.
    if (obj is MovieClip) 

        // Do something like below.
        MovieClip(obj).myObj.A_function_in_the_object();
        break;
    

【讨论】:

【参考方案2】:

MovieClip(this.parent)slider 而不是 parent。您可以通过MovieClip(this.parent.parent) 访问父时间线。如果您想访问myObj 然后MovieClip(this.parent.parent).myObj 也可以通过MovieClip(this.parent.parent).myObj.propertyA 访问myObj 中的任何属性。在这种情况下,A_function_in_the_objectmyObj 的属性。

【讨论】:

请问myObjmovieClip1的框架已经定义了吗?

以上是关于如何从子 Slider 影片剪辑访问父项中定义的对象的主要内容,如果未能解决你的问题,请参考以下文章

禁用对子项的鼠标检测但保留在父项上

如何使用 as3 同时访问所有影片剪辑(以及影片剪辑中的影片剪辑......)?

访问链接属性未定义的影片剪辑

如何从另一个影片剪辑中访问影片剪辑中的帧

在 flash actionscript 2 中动态访问嵌套的影片剪辑

使用 JSFL AS3 CS5.5 访问子/嵌套影片剪辑