从动态MovieClip实例调用Movie Clip(根)会产生错误1034



NINJA编辑:出于某种原因,同样的代码现在可以工作,没有任何问题。我不知道发生了什么,也不知道为什么,但我不再有这个问题

以下是原始帖子:


简单地说,我创建了一个MovieClip,将其与addChild()一起放在舞台上,当我试图调用这段代码时:

MovieClip(root).someFunction();

它引发错误#1034:类型强制失败:无法转换flash。显示::Stage@4034f71至flash.display.MovieClip.

我真的不明白为什么这段代码不起作用。对象本身工作得很好,因为我可以调用其中的函数(那行代码实际上在函数中)。只是有问题的那段代码

有人能告诉我哪里出了问题吗?

编辑:为了更好地说明这种情况,下面是我的代码:

在电影剪辑中,我有这个功能:

function bombReset():void
{
    bBombIsDropped = false;
    tCarpetBombTween.gotoAndStop(0);
    this.visible = false;
    MovieClip(root).carpetBombAttack(iPosition);
}

在Scene1(根,最外层的父级)上,我有这样的功能:

function carpetBombAttack(position:int):void
{
    damagePlant(15,vTileOccupant[(position-1)]);
}

如果我通过addChild创建一个MovieClip实例并在其中调用bombReset,Flash将抛出错误

如果我手动将MovieClip拖到舞台上,当我调用bombReset时,它将正常工作

您的错误意味着编译器不知道MovieClipStage是如何相同的。此外,我不确定,但我相信编译器会抱怨someFunction不存在于舞台上,即使您正确地广播了stage(又名根)。

解决这个问题的正确方法是为项目分配一个文档类,并使someFunction成为一个公共方法(类函数)。

外行的解决方案(我有时会在懒惰时使用)是以下

Object(this.stage).someFunction();

这是因为类型转换this.stage的方式会使编译器认为它是Object而不是StageObject可以有任意数量的未记录的属性和函数,因此允许您调用Object上的项,无论它们是否是类定义的一部分(甚至是不存在的项,这可能会给您自己带来麻烦)。

Stage的继承是Stage -> DisplayObjectContainer -> InteractiveObject -> ...,而MovieClipMovieClip -> Sprite -> DisplayObjectContainer -> InteractiveObject -> ...(我会直接链接到文档,但页面一直在崩溃)。

虽然它们共享公共基类,但StageMovieClip类实际上并不相关,因此尝试将其中一个强制转换为另一个将失败。

当您执行MovieClip(root)类型转换而不是root as MovieClip类型转换时,这就是您得到错误的原因。

直接将其强制转换为定义了someFunction()的对象,使用Jackson定义的解决方案,或者如果您完全知道它在那里,也可以执行root["someFunction"]()

相关内容

最新更新