Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 删除由类as3创建的子级_Actionscript 3_Flash_Removechild - Fatal编程技术网

Actionscript 3 删除由类as3创建的子级

Actionscript 3 删除由类as3创建的子级,actionscript-3,flash,removechild,Actionscript 3,Flash,Removechild,几个月来,我一直在为一个班级项目学习AS3,我所知道的大部分是通过观察其他问题是如何在这里解决的 切中要害 我有一个名为Generate的类,所以我将其导入到我的主时间轴中,在该类中它创建一个子项并将其添加 现在我不知道如何删除它,它总是说它为空: “TypeError:Error#2007:参数子项必须为非null。” 这就是它的生成方式。Mons2、three和four还有一些代码。相同的代码不同的名称。这就是文件中的全部内容 我尝试过各种方法来删除代码,但总是出现错误,并且没有实际删除子代

几个月来,我一直在为一个班级项目学习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
use
parent.removeChild(monsOne)@akmozo我已经尝试过了,但仍然得到了#2007错误。我用了()。谢谢你。还有其他想法吗?@subdan我仍然得到#2007参数child不能是非null错误。谢谢,还有其他想法吗?@Richard Barrett你能展示Generate.as文件的所有代码吗?很好,你得到了一个答案,并且已经接受了它,太糟糕了,你的代码仍然不起作用,而且远没有被修复。@BotMaster我接受了它,因为它可以工作。。我们在主要帖子的评论中进行了分类。感谢您在下面的输入。它现在正在工作,但感谢您的输入,名称已在另一个文件中设置。Generate.as
var 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();