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

时间:2012-01-14 00:55:53

标签: actionscript-3

忍者编辑: 出于某种原因,相同的代码现在可以正常工作,完全没有任何问题。我不知道发生了什么,或者为什么,但我不再有这个问题

这是原帖:


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

MovieClip(root).someFunction();

抛出错误#1034:类型强制失败:无法将flash.display :: Stage @ 4034f71转换为flash.display.MovieClip。

我真的无法弄清楚为什么这段代码不起作用。对象本身工作正常,因为我可以在其中调用函数(该行代码实际上在函数内)。只是那段有问题的代码

有人可以告诉我哪里出错了吗?

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

在MovieClip中,我有这个功能:

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

在Scene1(root,最外层的父节点)上我有这个功能:

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

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

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

2 个答案:

答案 0 :(得分:0)

您的错误意味着编译器不知道MovieClipStage是如何相同的。另外,我不确定,但我相信编译器会抱怨someFunction不存在于舞台上,即使你正确地 stage(也称为root)。< / p>

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

男人解决方案(我有时会在懒惰时使用)是以下

Object(this.stage).someFunction();

这是有效的,因为你是类型转换 this.stage的方式,使编译器认为它是Object而不是StageObject可以包含任意数量的未记录的属性和函数,因此允许您调用Object上的项目,无论它们是否是类定义的一部分(甚至是不存在的类别) - 是你可以让自己陷入困境的地方。)

答案 1 :(得分:0)

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

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

当你正在进行MovieClip(root)类型广播时,而不是root as MovieClip投射,这就是你得到错误的原因。

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