Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 RemoveChild不作为3闪存工作_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 RemoveChild不作为3闪存工作

Actionscript 3 RemoveChild不作为3闪存工作,actionscript-3,flash,Actionscript 3,Flash,我在这里遇到了一个问题,因为我试图在屏幕上显示祝贺消息时删除矩形的任何实例。代码有点凌乱,但为了弄清楚这一点,我一直在到处乱搞。如果我将addChild更改为stage.addChild,这会由于在shootMob功能中拍摄和删除它们而产生错误。我还将其称为rectangle.parent.removeChild(rectange),但这也不起作用。有什么想法吗 function spawnMob1():void { if (gameLevel==1) { var

我在这里遇到了一个问题,因为我试图在屏幕上显示祝贺消息时删除矩形的任何实例。代码有点凌乱,但为了弄清楚这一点,我一直在到处乱搞。如果我将
addChild
更改为
stage.addChild
,这会由于在
shootMob
功能中拍摄和删除它们而产生错误。我还将其称为
rectangle.parent.removeChild(rectange)
,但这也不起作用。有什么想法吗

function spawnMob1():void  
{  
    if (gameLevel==1)
    {
    var rectangle:MovieClip = new ball_mc();
        rectangle.x = randomRange(583);
    rectangle.y = randomRange(100);
    addChild(rectangle);

    var mobMoveX:Tween = new Tween(rectangle, "x", None.easeOut, rectangle.x, character_mc.x, 6, true);
    var mobMoveY:Tween = new Tween(rectangle, "y", None.easeOut, rectangle.y, character_mc.y, 6, true);


    rectangle.visible = true;

    rectangle.addEventListener(MouseEvent.CLICK, shootMob);
    function shootMob(e:MouseEvent): void
    {
        if (contains(rectangle)) 
        {
            removeChild(rectangle);
            score_txt.text = String(score);
        }
        score+=20;
        trace("Score:" + score);
    }

        if (score>=60)
        {
            trace("Congratulations!");
            congratulations1_mc.visible = true;

            trace("GameLevel:" + gameLevel);


            removeChild(rectangle);
//          rectangle.visible = false;

            gameLevel = 0;

        }


    character_mc.addEventListener(Event.ENTER_FRAME, charHit);

    function charHit(event:Event): void
    {
        if (rectangle.hitTestObject(character_mc))
        {
            if (contains(rectangle)) 
                        {
                       removeChild(rectangle);
            if (health>0)
            {
                health-=5;
                health_txt.text = String(health);
                trace("boop");
                trace("Health:" + health);
            } else if (health<=0) {
                    trace("You have died");
                    death_mc.visible = true;
                    gameLevel=0;

            }
    }

}
}
函数spawnMob1():void
{  
如果(游戏级别==1)
{
变量矩形:MovieClip=newball_mc();
矩形.x=随机范围(583);
矩形。y=随机范围(100);
addChild(矩形);
var mobMoveX:Tween=新Tween(矩形,“x”,无.easeOut,矩形.x,字符x,6,true);
var mobMoveY:Tween=新的Tween(矩形,“y”,None.easeOut,矩形.y,character_mc.y,6,true);
矩形。可见=真;
矩形.addEventListener(MouseEvent.CLICK,shootMob);
函数shootMob(e:MouseEvent):void
{
if(包含(矩形))
{
removeChild(矩形);
score_txt.text=字符串(分数);
}
分数+=20分;
跟踪(“分数:+分数);
}
如果(分数>=60)
{
trace(“祝贺你!”);
祝贺1_mc.visible=true;
跟踪(“游戏级别:+GameLevel”);
removeChild(矩形);
//矩形。可见=假;
游戏级别=0;
}
字符\u mc.addEventListener(Event.ENTER\u FRAME,charHit);
函数charHit(事件:事件):void
{
if(rectangle.hitTestObject(character_mc))
{
if(包含(矩形))
{
removeChild(矩形);
如果(运行状况>0)
{
健康-=5;
health_txt.text=字符串(health);
跟踪(“boop”);
跟踪(“健康:+健康”);

}否则,如果(健康您将
}
shootMob
放错了位置,则应包含
(分数>=60)
块。

将一个函数写入另一个函数是一种不好的编码风格。如何改为:
Writing one function inside another function is a bad coding style. What about this instead:

    import flash.events.MouseEvent;
    import flash.events.Event;
    import fl.transitions.Tween;
    import flash.text.TextField;
    import flash.display.MovieClip;

 var score_txt:TextField = new TextField(50,50,0xFFFFF);
    var score:Number;
    var gameLevel:int = 1;

 var rectangle:MovieClip;

    //function spawnMob1():void  
    //{  
        if (gameLevel==1)
        {
   rectangle = new ball_mc()

    rectangle.x =  randomRange(583);
    rectangle.y =  randomRange(100);
    addChild(rectangle);

    var mobMoveX:Tween = new Tween(rectangle,"x",None.easeOut,rectangle.x,character_mc.x,6,true);
    var mobMoveY:Tween = new Tween(rectangle,"y",None.easeOut,rectangle.y,character_mc.y,6,true);
     rectangle.visible = true;

    rectangle.addEventListener(MouseEvent.CLICK, shootMob);

}

    function shootMob(e:MouseEvent):void
    {
        if (contains(rectangle))
        {
            removeChild(rectangle);
            score_txt.text = String(score);
        }
        score +=  20;
        trace("Score:" + score);

    if (score>=60)
    {
        trace("Congratulations!");
        congratulations1_mc.visible = true;
        trace("GameLevel:" + gameLevel);
        if(rectangle || congratulations1_mc.visible == true)
        removeChild(rectangle);
        gameLevel = 0;
    }
}

    character_mc.addEventListener(Event.ENTER_FRAME, charHit);

    function charHit(event:Event):void
    {
        if (rectangle.hitTestObject(character_mc))
        {
            if (contains(rectangle))
            {
                removeChild(rectangle);
                if (health>0)
                {
                    health -=  5;
                    health_txt.text = String(health);
                    trace("boop");
                    trace("Health:" + health);
                }
                else if (health<=0)
                {
                    trace("You have died");
                    death_mc.visible = true;
                    gameLevel = 0;

                }
            }
        }
    }
导入flash.events.MouseEvent; 导入flash.events.Event; 导入fl.transitions.Tween; 导入flash.text.TextField; 导入flash.display.MovieClip; var score_txt:TextField=新TextField(50,50,0xFFFFF); var评分:数字; 变量gameLevel:int=1; var矩形:MovieClip; //函数1():void //{ 如果(游戏级别==1) { 矩形=新球_mc() 矩形.x=随机范围(583); 矩形。y=随机范围(100); addChild(矩形); var mobMoveX:Tween=新Tween(矩形,“x”,无.easeOut,矩形.x,字符_mc.x,6,true); var mobMoveY:Tween=新Tween(矩形,“y”,无.easeOut,矩形.y,字符_mc.y,6,true); 矩形。可见=真; 矩形.addEventListener(MouseEvent.CLICK,shootMob); } 函数shootMob(e:MouseEvent):void { if(包含(矩形)) { removeChild(矩形); score_txt.text=字符串(分数); } 分数+=20分; 跟踪(“分数:+分数); 如果(分数>=60) { trace(“祝贺你!”); 祝贺1_mc.visible=true; 跟踪(“游戏级别:+GameLevel”); if(矩形| |祝贺1_mc.visible==true) removeChild(矩形); 游戏级别=0; } } 字符\u mc.addEventListener(Event.ENTER\u FRAME,charHit); 函数charHit(事件:事件):void { if(rectangle.hitTestObject(character_mc)) { if(包含(矩形)) { removeChild(矩形); 如果(运行状况>0) { 健康-=5; health_txt.text=字符串(health); 跟踪(“boop”); 跟踪(“健康:+健康”); }
否则如果(Health可能是一个作用域问题,这是您使用本地函数的方式;除非您引用的内容有输入错误。我不会引用鼠标事件处理程序中的
矩形
实例-您依赖的是函数内部的旧引用。感谢您的回复!我将其移动到了Spawnmob块中,但它仍然是r。)我在舞台上表演。由于游戏级别值和所有内容的变化,怪物停止繁殖,我无法移除现有的(朝目标移动)以离开舞台。我不喜欢将函数放在另一个函数中,但做任何其他事情都会导致引用“矩形”导致空对象错误。谢谢你的回复!我已经尝试过了,到目前为止一切都很好,但是,很明显,这只是添加了一个子项。你建议如何添加更多的子项?我会把它放回现有的gameLevel==1 if语句中吗?不,我只是为了规范你的代码而注释。如果需要,你可以添加子项在条件下。我不明白你在gameLevel==1条件下检查什么。这有什么需要。或者在函数外声明矩形变量,因为你可以到处都可以。对不起,我想问的是,如果我重新引入setInterval方法(甚至计时器),mob的创建必须在函数内。如果这是在函数内,则对“矩形”的其他调用必须在此函数内,因为以前的错误我无法访问“矩形”不在创建它们的函数内部。你不能在函数外部全局声明你的矩形变量。前几天尝试过,这样做似乎会继续重新绘制movieClip实例(使用你的代码)回到x:100y:10,它永远不会成为字符_mc的完整路径。我假设这是因为矩形变量被覆盖