【问题标题】:AS3 addChild PARADOX.AS3 addChild PARADOX。
【发布时间】:2012-07-27 21:37:00
【问题描述】:

好的,这是一个我认为更多关于方法的问题。我对此很陌生,因此我认为方法有误。

我想制作一个“游戏”,每次点击时,舞台都会创建一个 addChild。 在我有限的知识和反复尝试的情况下搜索了几个网站后,我得出了这个结论:

mouse.addEventListener(MouseEvent.CLICK, CREATE);
function CREATE(e:Event):void {
    var square:MovieClip = new squarelink();
    addChild(square);
    square.x = mouseX;
    square.y = mouseY;
} 

现在我的问题是我想对其进行编码,给这个新的movieclip 一些“事件”,但是因为我的movieclip 直到我点击后才会出现在舞台上。其名称中的任何 addeventlistener 都会出现:访问可能未定义的属性。这导致我的 swf 失败。

因此我尝试设置“var square:MovieClip = new squarelink();”超出我的 CREATE 功能。这只是导致它仅在我单击时移动正方形,而不是创建新的一次。是如何让我现在可以添加事件的。

总结一下。我需要一种方法,允许我创建几个“孩子”,并让我添加一个事件,如果我再次点击它:删除它自己。

这并没有告诉我舞台上还没有任何广场。

(这是对问题的解释,欢迎对拼写错误发表任何评论,或者“你需要一个大 R 才能工作”,但可能无法使用。我知道如何正确编写代码,我只是不知道写了哪些代码。)

我希望这个问题得到了很好的解释,我希望这里的人能提供帮助,因为距离我回到学校还有 1 个月的时间请教我的老师。 :D

【问题讨论】:

    标签: actionscript-3 instance addchild paradox


    【解决方案1】:

    您应该为您的问题开发一个更复杂、面向对象的解决方案。有一个主应用程序类来创建对象,并让这些创建的对象将“请移除我”事件分派给创建者对象。

    但是,考虑到您在此处给出的这个简单示例,有一个简单的解决方案涉及停止从单击的对象到舞台的事件传播。

    stage.addEventListener(MouseEvent.CLICK, createCircle);
    function createCircle(event:MouseEvent):void
    {
        var circle:Sprite = new Sprite();
        circle.graphics.beginFill(0x00FF00);
        circle.graphics.drawCircle(0, 0, 20);
        circle.x = stage.mouseX;
        circle.y = stage.mouseY;
        stage.addChild(circle);
    
        circle.addEventListener(MouseEvent.CLICK, removeCircle);
    }
    
    function removeCircle(event:MouseEvent):void
    {
        stage.removeChild(event.currentTarget as DisplayObject);
    
        // magic!
        event.stopPropagation();
    }
    

    【讨论】:

      【解决方案2】:

      以上代码用于在舞台上创建一个movieclip 实例。要删除影片剪辑,您需要为该影片剪辑附加一个类。在该类中,添加一个必须删除包含的影片剪辑的事件侦听器。

      【讨论】:

        【解决方案3】:

        addChild PARADOX ??无论如何,我所理解的是你需要:

        • 在舞台点击时将影片剪辑添加到舞台上。
        • 单击一次然后再次单击时删除影片剪辑。

        如果是这种情况,请以此为例:

        stop();
        
        stage.addEventListener(MouseEvent.CLICK, createBox);
        
        function createBox(e:MouseEvent) {
        
            if(e.target != stage) return;
        
            var square:MovieClip = new MovieClip();
        
            square.graphics.beginFill(0,1);
            square.graphics.drawRect(0,0,25,25);
            square.graphics.endFill();
        
            square.x = 100;
            square.y = 100; 
            square.name = "mc" + this.numChildren;
        
            square.addEventListener(MouseEvent.CLICK, function(e) {
        
                var sq:MovieClip = e.currentTarget;
        
                if(sq.name.charAt(0) == '_') removeChild(sq);
        
                else sq.name = "_" + sq.name;       
            });
        
            addChild(square);   
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-07
          • 2012-05-11
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多