Actionscript 3 删除由类as3创建的子级
几个月来,我一直在为一个班级项目学习AS3,我所知道的大部分是通过观察其他问题是如何在这里解决的 切中要害 我有一个名为Generate的类,所以我将其导入到我的主时间轴中,在该类中它创建一个子项并将其添加 现在我不知道如何删除它,它总是说它为空: “TypeError:Error#2007:参数子项必须为非null。” 这就是它的生成方式。Mons2、three和four还有一些代码。相同的代码不同的名称。这就是文件中的全部内容 我尝试过各种方法来删除代码,但总是出现错误,并且没有实际删除子代码Actionscript 3 删除由类as3创建的子级,actionscript-3,flash,removechild,Actionscript 3,Flash,Removechild,几个月来,我一直在为一个班级项目学习AS3,我所知道的大部分是通过观察其他问题是如何在这里解决的 切中要害 我有一个名为Generate的类,所以我将其导入到我的主时间轴中,在该类中它创建一个子项并将其添加 现在我不知道如何删除它,它总是说它为空: “TypeError:Error#2007:参数子项必须为非null。” 这就是它的生成方式。Mons2、three和four还有一些代码。相同的代码不同的名称。这就是文件中的全部内容 我尝试过各种方法来删除代码,但总是出现错误,并且没有实际删除子代
stage.removeChild(monsOne);
monsOne.parent.removeChild(monsOne);
removeChild(monsOne);
package {
import MonsterOne;
import MonsterTwo;
import MonsterThree;
import MonsterFour;
import flash.display.*;
public class Generate extends MovieClip{
public static var monsterID = String(monsterID);
monsterID = Math.ceil(Math.random() * 4).toString();
public function Generate(parent:Object){
if (monsterID == 1){
var monsOne:MonsterOne = new MonsterOne();
monsOne.name = "monsterOne";
parent.addChild(monsOne);
monsOne.x = 100;
monsOne.y = 200;
trace("spawn1");
}
if (monsterID == 2){
var monsTwo:MonsterTwo = new MonsterTwo();
monsTwo.name = "monsterTwo";
parent.addChild(monsTwo);
monsTwo.x = 100;
monsTwo.y = 200;
trace("spawn2");
}
if (monsterID == 3){
var monsThree:MonsterThree = new MonsterThree();
monsThree.name = "monsterThree";
parent.addChild(monsThree);
monsThree.x = 100;
monsThree.y = 200;
trace("spawn3");
}
if (monsterID == 4){
var monsFour:MonsterFour = new MonsterFour();
monsFour.name = "monsterFour";
parent.addChild(monsFour);
monsFour.x = 100;
monsFour.y = 200;
trace("spawn4");
}
}
}
谁知道还有多少人
我是错过了什么,还是完全做错了
多谢各位
--编辑--
}
完整生成文件生成
类只生成一个怪物。在gameOver
功能中,您试图移除所有4个怪物,但您得到一个错误,即怪物不存在。您应该添加条件:
if (monsOne) removeChild(monsOne);
if (monsTwo) removeChild(monsTwo);
if (monsThree) removeChild(monsThree);
if (monsFour) removeChild(monsFour);
你的代码有太多错误,不容易知道从哪里开始。您对显示列表和最重要的范围缺乏非常基本的了解
显示列表:
当你这样做的时候:
var monsOne:MovieClip = getChildByName('monsterOne') as MovieClip;
parent.removeChild(monsOne);
这可以解释为“不知道我在这里做什么”。为什么?因为代码意味着它期望一个名为“monsterOne”的DisplayObject存在于“this”(范围中的显示列表)的显示列表中,然后尝试从“parent”中删除该对象。如果对象存在于显示列表A中,则将其从显示列表A中删除,而不是从显示列表B中删除,所有这些都没有意义
编程:
您正在使用镜像现有属性的变量和参数,例如:“父级”。你确定在你的编程水平上,你可以用这种危险的编程行为来迷惑自己吗?答案是否定的,不要镜像属性名称
范围:
您一直在到处丢失作用域,但仍在编写代码,就像作用域根本不存在一样。别说了。一个作用域中名为monsOne的变量不存在于任何其他作用域中,period
更奇怪的是:
public static var monsterID = String(monsterID);
monsterID = Math.ceil(Math.random() * 4).toString();
你不知道这有什么明显的作用,否则你就不会那样做
你的代码是做什么的
它创建了一个和一个唯一的movieclip类型,每次创建它时,它会给它一个完全相同的名称,并将它添加到一个我们一无所知的幻影“父”。然后,当您试图删除它时,您甚至不知道或不记得这个幻影父对象是什么,您也不能真正使用getChildByName(),因为您需要了解父对象才能执行此操作,更糟糕的是,到那时,可能会有这么多MovieClip,并且都具有相同的名称
如何修复
稍后,当您询问有关如何修复的具体问题时,将填写此部分。您可以使用,例如,获取您的对象,然后您可以删除它…删除monsOne
useparent.removeChild(monsOne)代码>@akmozo我已经尝试过了,但仍然得到了#2007错误。我用了()。谢谢你。还有其他想法吗?@subdan我仍然得到#2007参数child不能是非null错误。谢谢,还有其他想法吗?@Richard Barrett你能展示Generate.as文件的所有代码吗?很好,你得到了一个答案,并且已经接受了它,太糟糕了,你的代码仍然不起作用,而且远没有被修复。@BotMaster我接受了它,因为它可以工作。。我们在主要帖子的评论中进行了分类。感谢您在下面的输入。它现在正在工作,但感谢您的输入,名称已在另一个文件中设置。Generate.asvar monsOne:MonsterOne=new MonsterOne();monsOne.name=“monsterOne”正如我说的,我是新来的,我知道代码不是特别好。但这是一门设计课程,不是编程课程<代码>公共静态变量monsterID=String(monsterID);monsterID=Math.ceil(Math.random()*4.toString()
是在1和4之间随机设置一个数字,并将其设置为字符串,以便我可以在其他地方调用它。这正是我想要的,我看不出有什么问题?不过谢谢你的调查。
var monsOne:MovieClip = getChildByName('monsterOne') as MovieClip;
parent.removeChild(monsOne);
public static var monsterID = String(monsterID);
monsterID = Math.ceil(Math.random() * 4).toString();