在兄弟MovieClip中调用函数

时间:2012-02-26 23:06:52

标签: actionscript-3

在我的舞台上是一个名为Box的MovieClip和一个名为InfoBox的MovieClip。 InfoBox有一个名为setInfo的函数。 Box,当点击(它是一个MovieClip,而不是一个按钮)时,想要调用InfoBox的setInfo函数。

我尝试在Box中使用以下代码:

MovieClip(this.parent).InfoBox.setInfo();

这产生了以下错误:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::Stage@34a8ef99 to flash.display.MovieClip.
at Box/infoBox()

在兄弟MovieClip中调用函数的正确方法是什么?

编辑
InfoBox.as看起来像这样:

package  {

    import flash.display.MovieClip;

    public class InfoBox extends MovieClip {

        public function InfoBox() {
            //Constructor
        }

        public function setInfo(){
            trace("info set");
        }
    }
}

4 个答案:

答案 0 :(得分:2)

您不应该在兄弟剪辑上调用函数。相反,从想要请求函数调用的子类调度一个事件,让父级监听它,然后让父级调用适当的函数。这被称为“松耦合”,从长远来看,它将为您提供良好的服务。

答案 1 :(得分:1)

您应将名称设为InfoBox。然后你可以像这样访问它:

var b:InfoBox = this.parent.getChildByName(“InfoBox”) as InfoBox;
b.setInfo();

答案 2 :(得分:0)

从子剪辑

可以做到这一点:

(parent as MovieClip).InfoBox.setInfo();

答案 3 :(得分:0)

该类的名称是InfoBox,但您需要使用该类的特定实例的名称。在Flash编辑器中手动放置动画片段时,可以在“属性”窗口中为其命名。