首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3 addChild悖论。

AS3 addChild悖论。
EN

Stack Overflow用户
提问于 2012-07-27 18:48:29
回答 3查看 468关注 0票数 0

好的,我想这是一个更多关于方法的问题。我在这方面还是个新手,因此我认为我的方法是错误的。

我想做一个“游戏”,每次你点击的时候,舞台都会创建一个addChild。经过几个网站的搜索,以我有限的知识和来回尝试,我得出了这样的结论:

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

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

因此,我尝试在CREATE函数中设置"var square:MovieClip = new squarelink();“。这只会导致它只在我点击时移动方块,而不是创建一次新的。我是如何添加事件的呢?

所以总而言之。我需要一个方法,允许我创建几个“孩子”,并允许我添加一个事件,如果我再次单击它,它会声明:自己删除它。

这并没有告诉我舞台上还没有任何方块。

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

我希望这个问题能得到很好的解释,我希望这里的人能帮上忙,因为离我回到学校去问我的老师还有一个月的时间。:D

EN

回答 3

Stack Overflow用户

发布于 2012-07-27 21:37:00

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

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

代码语言:javascript
复制
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();
}

  • http://www.learningactionscript3.com/2007/11/19/stopping-event-propagation/
票数 1
EN

Stack Overflow用户

发布于 2012-07-27 19:07:09

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

票数 0
EN

Stack Overflow用户

发布于 2012-07-27 20:15:09

addChild悖论??不管怎样,我所理解的是你需要:

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

如果是这种情况,请使用下面的示例:

代码语言:javascript
复制
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);   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11686301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档