2011-04-11 75 views
0

我只是在学习ActionScript 3,所以这对你的亲们来说可能是一个简单的问题。 我使用按钮创建了我想添加到舞台(从库中)的影片剪辑。我总共有六个按钮(和六个moviclips),但我试图在开始下一个按钮之前让前两个按钮工作。问题是,我似乎无法删除当另一个按钮被点击或相同的按钮时删除影片剪辑...就像我说我是新来的,我认为创造了一堆东西......我得到错误2007现在ActionScript 3 - 添加和删除舞台上的孩子

import flash.events.MouseEvent; 
import flash.display.MovieClip; 

mix_btn.addEventListener(MouseEvent.CLICK, addbear); 
function addbear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = new bear1(); 
    addChild(movieClip); 
    movieClip.x = 240; 
    movieClip.y = 45; 


mix_btn.removeEventListener(MouseEvent.CLICK, addbear); 
mix_btn.addEventListener(MouseEvent.CLICK, removebear); 
} 
function removebear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = null; 
    removeChild(movieClip); 
    mix_btn.removeEventListener(MouseEvent.CLICK, removebear); 
/* mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/ 
} 
shake_btn.addEventListener(MouseEvent.CLICK, addbear3); 
function addbear3(event:MouseEvent):void 
{ 
    var movieClip:bear3 = new bear3(); 
    addChild(movieClip); 
    movieClip.x = 240; 
    movieClip.y = 45; 

    shake_btn.removeEventListener(MouseEvent.CLICK, addbear3); 
    shake_btn.addEventListener(MouseEvent.CLICK, removebear3); 
} 
function removebear3(event:MouseEvent):void 
{ 
    var movieClip:bear3 = null; 
    removeChild(movieClip); 
    shake_btn.removeEventListener(MouseEvent.CLICK, removebear3); 
    shake_btn.addEventListener(MouseEvent.CLICK, addbear3); 
} 

回答

2
var movieClip:bear1 = null; 
removeChild(movieClip); 
mix_btn.removeEventListener(MouseEvent.CLICK, removebear); 

这里这部分,你基本上尝试删除一个空对象,它通常是不好的:)。这适用于“蛇”和其他按钮或动画片段。如果你想删除您按下了熊,试试这个:

var movieClip:bear1 = bear1(event.currentTarget); 
removeChild(movieClip); 
mix_btn.removeEventListener(MouseEvent.CLICK, removebear); 
0

的问题是,如果引用的动画片段作为一个函数级别的变量,它消失时功能齐全。当您的删除功能稍后发生时,动画片段本身仍然存在,但用于引用它的动画片段变量已消失。

如果删除事件直接在熊上,您可以使用event.currentTarget来访问并删除它。

相反,由于您的侦听器看起来像一个单独的按钮,因此您需要引用可在任何地方使用的动画片段。如果您将实例名称分配给动画片段,则可以稍后使用它来访问和删除它。

function addbear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = new bear1(); 
    addChild(movieClip); 
    movieClip.x = 240; 
    movieClip.y = 45; 
    movieClip.name = "bear1"; 
} 

function removebear(event:MouseEvent):void 
{ 
    removeChild(getChildByName("bear1")); 
} 
+0

只要将其添加到显示列表中,它就不能“消失”。不仅如此,他使用2个不同的局部变量,所以当然不是这样。 – 2011-04-11 17:00:53

0

这完全是一个范围问题 在你的函数addbear您创建一个变种作用域此函数调用的动画片段

mix_btn.addEventListener(MouseEvent.CLICK, addbear); 
function addbear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = new bear1(); 
    addChild(movieClip); 
    movieClip.x = 240; 
    movieClip.y = 45; 


mix_btn.removeEventListener(MouseEvent.CLICK, addbear); 
mix_btn.addEventListener(MouseEvent.CLICK, removebear); 
} 
function removebear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = null; 
    removeChild(movieClip); 
    mix_btn.removeEventListener(MouseEvent.CLICK, removebear); 
/* mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/ 
} 

纠正这一点,你需要移动mopvieClip范围的功能外

mix_btn.addEventListener(MouseEvent.CLICK, addbear); 
    var movieClip:bear1 // **********************global scoping 
    function addbear(event:MouseEvent):void 
    { 
     movieClip = new bear1(); // *************constructing new GLOBAL object here 
     addChild(movieClip); 
     movieClip.x = 240; 
     movieClip.y = 45; 


    mix_btn.removeEventListener(MouseEvent.CLICK, addbear); 
    mix_btn.addEventListener(MouseEvent.CLICK, removebear); 
    } 
    function removebear(event:MouseEvent):void 
    { 
     removeChild(movieClip);//****************** remove movieClip first 
     movieClip= null; // **********************destroying GLOBAL object here 
     mix_btn.removeEventListener(MouseEvent.CLICK, removebear); 
    /* mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/ 
    } 
相关问题