Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从动态MovieClip实例调用MovieClip(root)会产生错误1034_Actionscript 3 - Fatal编程技术网

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

Actionscript 3 从动态MovieClip实例调用MovieClip(root)会产生错误1034,actionscript-3,Actionscript 3,忍者编辑: 出于某种原因,相同的代码现在可以正常工作,没有任何问题。我不知道发生了什么,或者为什么,但我不再有这个问题 以下是原始帖子: 简单地说,我创建了一个MovieClip,将它与addChild()一起放到后台,当我试图调用这段代码时: MovieClip(root).someFunction(); 它抛出错误#1034:类型强制失败:无法转换闪存。显示::Stage@4034f71要闪烁.display.MovieClip 我真的不明白为什么这段代码不能工作。对象本身工作得很好,因

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

以下是原始帖子:
简单地说,我创建了一个MovieClip,将它与addChild()一起放到后台,当我试图调用这段代码时:

MovieClip(root).someFunction();
它抛出错误#1034:类型强制失败:无法转换闪存。显示::Stage@4034f71要闪烁.display.MovieClip

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

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

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

在MovieClip中,我有以下功能:

function bombReset():void
{
    bBombIsDropped = false;
    tCarpetBombTween.gotoAndStop(0);
    this.visible = false;
    MovieClip(root).carpetBombAttack(iPosition);
}
function carpetBombAttack(position:int):void
{
    damagePlant(15,vTileOccupant[(position-1)]);
}
在Scene1(根,最外层的父节点)上,我有一个函数:

function bombReset():void
{
    bBombIsDropped = false;
    tCarpetBombTween.gotoAndStop(0);
    this.visible = false;
    MovieClip(root).carpetBombAttack(iPosition);
}
function carpetBombAttack(position:int):void
{
    damagePlant(15,vTileOccupant[(position-1)]);
}
如果我通过addChild创建MovieClip实例并在其中调用bombReset,Flash将抛出一个错误


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

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

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

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

Object(this.stage).someFunction();

这是因为您正在以某种方式键入
this.stage
,使编译器认为它是
对象,而不是
stage
Object
s可以有任意数量的未记录属性和函数,因此允许您调用
Object
上的项,无论它们是否是类定义的一部分(甚至是不存在的项,这可能会让您陷入麻烦).

阶段
的继承是
阶段->显示对象容器->交互对象->.
MovieClip
MovieClip->Sprite->显示对象容器->交互对象->.
(我会直接链接到文档,但页面不断崩溃)

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

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


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

我手动添加了很多其他Movieclip(从库中拖动它们并给它们实例名),还有MovieClip(root)。有些函数代码工作得很好,这就是我感到困惑的原因。我会试试你的代码“someFunction”只是一个名字,函数实际上就在那里,我用同样的方式(MovieClip(root)。someFunction())从其他很多MovieClip中调用了同一个函数。顺便问一下,“root as MovieClip”和“MovieClip(root)”之间有什么区别?我想他们都是以“root”的方式键入对象的“作为一个电影演员?我认为MovieClip(root)只是MovieClip中root的较短方式。
MovieClip(root)
如果
root
不是
MovieClip
,就会抛出一个错误,而
root as MovieClip
只会给你
null
。这是一种首选的铸造方法。
MovieClip(root)
类型的铸造主要用于原语从一种类型铸造到另一种类型。例如:
Number(“2”)
我还认为您遇到的问题是,
根可以是
stage
,但不一定总是
stage
:-中定义的
someFunction()
函数是什么类?someFunction()是一个简单的函数,我没有为此创建或使用任何自定义类。请参阅我在上面文章中的编辑,它可能更好地说明我的情况