【问题标题】:How to access object defined in parent, from child Slider movieclip如何从子 Slider 影片剪辑访问父项中定义的对象
【发布时间】:2025-12-15 06:45:01
【问题描述】:

这是我的应用结构:

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。

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

【问题讨论】:

    标签: actionscript-3 flash object parent movieclip


    【解决方案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的框架已经定义了吗?