2014-11-01 50 views
0

我有一些代码,添加一个“后退”按钮的舞台,有自己的代码,并点击它删除按钮,并将用户带回标题屏幕。但是,当“后退”按钮重新引入舞台时,其所有听众都无法工作。Actionscript 3:监听器不工作后,孩子被删除,然后再次添加

public class BACK extends SimpleButton { 


    public function BACK() { 
     // constructor code 
     trace('back button on stage'); 
     addEventListener(Event.ADDED_TO_STAGE, startUp); 
    } 
    function startUp(ev:Event): void{ 
     addEventListener(MouseEvent.CLICK, gotoTitle); 
     addEventListener(Event.REMOVED_FROM_STAGE, backBtnCleanUp); 
    } 
    function gotoTitle(ev:MouseEvent): void{ 
     trace('gototitle called'); 
     MovieClip(root).gotoTitle(); 
    } 
    function backBtnCleanUp(ev:Event): void{ 
     trace('back button cleanup called'); 
     removeEventListener(Event.ADDED_TO_STAGE, startUp); 
     removeEventListener(MouseEvent.CLICK, gotoTitle); 
     removeEventListener(Event.REMOVED_FROM_STAGE, backBtnCleanUp); 
    } 
} 

跟踪功能在首次添加到舞台上时执行,但不会在被删除后再次添加时执行。这是来自Main的代码,它们都添加并删除它。

function gotoHelp(): void{ // transitions to the help screen 
     cleanTitle(); 
     addChild(helpBG); 
     addChild(backBtn); 
     backBtn.x = 550; 
     backBtn.y = 200; 
    } 
    function gotoTitle(): void{ //goes to the title screen 
     trace('going to title'); 
     removeChild(backBtn); 
     removeChild(helpBG); 
     titleStartUp(); 
    } 
+0

你在哪里实际上构建您的“后退”按钮的新实例? – Iggy 2014-11-01 20:44:53

+0

在gotoHelp函数中,它被命名为'backBtn'。它与BACK类相关联。或者我在这方面不理解“构造”一词的含义? – 2014-11-01 20:52:22

回答

1

您应该创建BACK按钮的新实例每次你需要显示它,或者从backBtnCleanUp功能删除此行时间:(未测试)

removeEventListener(Event.ADDED_TO_STAGE, startUp); 
+0

删除侦听器卸妆工作。为什么?为什么在实例再次创建时不会重新添加该侦听器? – 2014-11-01 21:04:14

+0

如果你删除了'ADDED_TO_STAGE'监听器,并且你没有为你创建一个新的''BACK'按钮,'startUp'函数就不会被重新执行。 – akmozo 2014-11-01 21:08:38

相关问题