好的,这是一个更多关于我认为的方法的问题。我对此很新,因此我觉得做错了。
我想制作一个“游戏”,每次点击时,舞台都会创建一个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将会出现:访问可能未定义的属性。这导致我的瑞士法郎失败。
因此我试图设置“var square:MovieClip = new squarelink();”我的CREATE功能。这只是导致它只在我点击时移动广场,而不是创建新的一次。我怎么能让我现在添加活动。
总结一下。我需要一个方法,允许我创建几个“孩子”,并让我添加一个事件,如果我再次点击它:自己删除它。
没有它告诉我舞台上还没有任何广场。
(这是对问题的解释,对拼写错误的任何评论,或“你需要一个大R来工作”是受欢迎的,但可能无法使用。我知道如何正确编写代码,我只是不知道写哪个代码。)
我希望这个问题能得到很好的解释,我希望有人在这里可以提供帮助,因为有一个月我才回到学校去问我的老师。 :d
答案 0 :(得分: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();
}
答案 1 :(得分:0)
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);
}