【问题标题】:Cannot convert root to movieclip无法将根目录转换为影片剪辑
【发布时间】:2014-03-30 23:48:07
【问题描述】:

我在主时间线的舞台上调用的影片剪辑中有这段代码

if(MovieClip(root).isWithinRange(MovieClip(e.currentTarget), MovieClip(root).hero,     10))
{
    if(e.currentTarget.getStatus() == 0)
    {
        e.currentTarget.unlock();
    }
}

它在 MovieClip(root) 处给我一个错误。我尝试追踪它,它给了我同样的错误。

Type Coercion failed: cannot convert flash.display::Stage@4e131e9 to flash.display.MovieClip.

Tracing root 给了我对象阶段。

所以我无法将 Stage 对象转换为 MovieClip,但是当我尝试跳过演员表时,它无法使用该方法,因为它说它是静态类型。如何访问此方法?

【问题讨论】:

    标签: actionscript-3 casting root movieclip typeconverter


    【解决方案1】:

    那是因为 stage 是 DisplayObject 而不是 MovieClip。所以你可以把它转换成MovieClip:

    var stageRef:MovieClip = this.parent as MovieClip; 
    

    如果对象被放置在舞台上 - stage.addChild(yourObject);

    或者您可以通过 DisplayObject 访问它(确保导入 flash.display.DisplayObject;)

    DisplayOject(stage)["nameOfUrObject"];
    

    【讨论】:

    • 第一个给我的 stageRef 为 null。如果我要尝试第二个,什么是“nameOfUrObject”?我尝试调用的函数还是根或 e.currentTarget?
    • 它是你的对象。你已经放在舞台上的那个。如果没有任何效果,我会在醒来时检查它。
    • 因此您可以使用 DisplayObject(stage) 和 DisplayOject(stage)["nameOfUrObject"] 访问舞台,您可以访问放置在舞台中的对象。进入 [] 只需给出它的实例名称。
    • 代码在 HomeRoom 对象中。所以我会写 DisplayObject(stage)["HomeRoom"]; ?
    【解决方案2】:

    这里的真正答案是舞台不是电影剪辑。期间。

    你不能做你想做的事,我显然不明白这个isWithinRange方法是从哪里来的?如果您想要答案,请提出具体问题。我已经回答了这个问题,不幸的是它对你没有多大帮助:)

    附言 阅读完所有 cmets - 这里有一个链接可以帮助你:AS3 - Call function in root timeline from class

    让所有事情都按时完成是一种非常非常糟糕的方法(很抱歉)。

    【讨论】:

    • 我无法访问主时间线上的方法?? isWithinRange 是主时间线第一层的方法
    • 我很想使用课程,但在这个 Flash 课程中我们不会这样做
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2010-11-03
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多