忍者编辑: 出于某种原因,相同的代码现在可以正常工作,完全没有任何问题。我不知道发生了什么,或者为什么,但我不再有这个问题
简而言之,我创建了一个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时,它会正常工作
答案 0 :(得分:0)
您的错误意味着编译器不知道MovieClip
和Stage
是如何相同的。另外,我不确定,但我相信编译器会抱怨someFunction
不存在于舞台上,即使你正确地 stage
(也称为root)。< / p>
解决此问题的正确方法是为项目分配文档类,并使someFunction
成为公共方法(类函数)。
男人解决方案(我有时会在懒惰时使用)是以下
Object(this.stage).someFunction();
这是有效的,因为你是类型转换 this.stage
的方式,使编译器认为它是Object
而不是Stage
。 Object
可以包含任意数量的未记录的属性和函数,因此允许您调用Object
上的项目,无论它们是否是类定义的一部分(甚至是不存在的类别) - 是你可以让自己陷入困境的地方。)
答案 1 :(得分:0)
Stage
的继承是Stage -> DisplayObjectContainer -> InteractiveObject -> ...
而MovieClip
是MovieClip -> Sprite -> DisplayObjectContainer -> InteractiveObject -> ...
(我直接链接到文档,但网页一直在崩溃我。)
虽然它们共享公共基类,但Stage
和MovieClip
类实际上并不相关,因此尝试将一个类转换为另一个类将失败。
当你正在进行MovieClip(root)
类型广播时,而不是root as MovieClip
投射,这就是你得到错误的原因。
将其直接投射到定义了someFunction()
的对象,使用Jackson定义的解决方案,或者如果您完全知道它在那里,您也可以root["someFunction"]()