Flash AS3参数子项必须为非空

Flash AS3参数子项必须为非空,flash,actionscript-3,null,Flash,Actionscript 3,Null,我有一个错误,我有一个主菜单场景,一个选项场景和一个游戏场景。我有一个外部文件,其中保存了场景之间需要的所有公共变量。在游戏中,背景中有一幅水的图片,它纯粹是装饰性的,不起任何作用,我在代码中使用它的唯一时间是当我将它移到后面时,这样其他平台可以通过使用代码定位在它上面: setChildIndex(gfxWater, 1); 在我将选项场景放入之前,这通常是有效的,现在仍然有效,只要我不转到选项场景。即使我没有在选项场景中触摸任何东西,只要转到那里就会导致此行抛出“参数Child必须为非nu

我有一个错误,我有一个主菜单场景,一个选项场景和一个游戏场景。我有一个外部文件,其中保存了场景之间需要的所有公共变量。在游戏中,背景中有一幅水的图片,它纯粹是装饰性的,不起任何作用,我在代码中使用它的唯一时间是当我将它移到后面时,这样其他平台可以通过使用代码定位在它上面:

setChildIndex(gfxWater, 1);
在我将选项场景放入之前,这通常是有效的,现在仍然有效,只要我不转到选项场景。即使我没有在选项场景中触摸任何东西,只要转到那里就会导致此行抛出“参数Child必须为非null”错误。我事先试图追踪gfxWater,但结果是无效的。我只是将水拖到屏幕上创建它,并将其命名为gfxWater实例。我不明白这怎么可能是空的,即使这一行断了,它仍然在那里,它只是在其他一切之上

在“选项”菜单中,我没有对水做任何事情,我只是在改变变量,比如是否播放音乐或音效,诸如此类的东西。与水无关。我能想到的唯一一件可能导致问题的事情是,我在选项场景中使用了自定义字体,因此我必须在AS3中创建文本。但是,在我转换回主菜单之前,我确保删除文本。代码如下:

//This Removes The Text
for (m = 0; m < optionsTextArray.length; m++){
    optionsTextArray[m].parent.removeChild(optionsTextArray[m]);
}
optionsTextArray.splice(0, optionsTextArray);

//This Hides The Images
soundFxCheck.parent.removeChild(soundFxCheck);
soundFxX.parent.removeChild(soundFxX);
musicCheck.parent.removeChild(musicCheck);
musicX.parent.removeChild(musicX);
codeCheck.parent.removeChild(codeCheck);
codeX.parent.removeChild(codeX);

//This Transitions To The Main Menu
gotoAndPlay("menuStart", "Main_Menu");
//这将删除文本
对于(m=0;m

在此问题上的任何帮助都将不胜感激。我在CS3上使用AS3(对不起,我的学校有点过时),仅供参考。提前谢谢

如果您有效地尝试执行此操作,将出现以下错误:

removeChild(null);
这意味着通过
removeChild()
解析的属性之一没有值


因为您没有提供任何代码来显示如何添加对象等等,所以很难确定您的问题在应用程序中的确切位置;我觉得上面所看到的一切都还可以。

与其从库中拖动它,为什么不添加代码?这样你就知道它存在于正确的范围内

您需要进入库中瀑布movieclip的属性,将其设置为Export for Actionscript,并为其指定一个名称(假设为瀑布)。然后:


现在,您不需要再次调整它的深度,因为它位于底部深度,任何其他对象都将添加到它上面,除非它们自己专门针对深度0。

没有添加水的代码,我只是在屏幕上拖动它并给它取了一个名称。即使线断了,水仍然在那里,非常好,就在所有平台的前面,而它应该在后面。但是没有代码把水放在屏幕上,我只是在designer中做的。嗯,我能想到的唯一一件事是,你可能会在项目实际存在于代码中之前调用代码。如果您尝试跟踪(thing)或跟踪(this[“thing”]),会发生什么情况;如果在setChildIndex行之前立即执行此操作,则会得到null。不知何故,它并不存在,但我认为在运行代码之前创建对象是足够明智的。再说一次,计算机不是太亮。只有当代码与您试图访问的对象放在同一个容器中时,这才有效。我想是这样的?你必须定义容器。代码在同一场景中,但在不同的层中,我将代码按其用途分开。所有与播放器相关的代码都放在一个层中,所有启动代码和keycode代码都放在另一个层中(setChildIndex行就在这里)。虽然水完全在一个层中,但没有代码或对象与它在一起。这个错误神奇地修复了它自己,我只是在其他部分工作时忽略了它,当我回到它时,它工作了。我不知道我做了什么,也不知道为什么它现在起作用了,但我想诅咒电脑偶尔也会起作用。
var waterfall:WaterFall = new WaterFall();
this.addChildAt(waterfall,0);