删除这个孩子并添加新的孩子 AS3

Posted

技术标签:

【中文标题】删除这个孩子并添加新的孩子 AS3【英文标题】:remove this child and add new child AS3 【发布时间】:2013-08-11 23:49:10 【问题描述】:

我已经被这个问题困扰了很长一段时间, 我正在使用 Main.as 和 LivrmScreen.as 基本上 LivrmScreen.as 是一个游戏屏幕,还有其他电影剪辑动作正在进行...... 然后我在 LivrmScreen 上有一个按钮,我希望删除 LivrmScreen 本身并显示 homeScreen(所有 homeScreen 功能都在 Main.as 中)

var homeScreen: HomeScreen;
public function LivrmScreen() 

        backhomeBtn.addEventListener(MouseEvent.CLICK, onBackhomeBtnClicked);

    
function onBackhomeBtnClicked(evt:MouseEvent) 

        homeScreen = new HomeScreen();


        stage.addChild(homeScreen);
        parent.removeChild(this);

    

这就是我现在拥有的, 我添加了 parent.removeChild 因为它只是 removeChild 时不会删除... 因此,我添加了 stage.addChild 以便主屏幕正确显示。

但是当 homeScreen 出现时,该按钮实际上不起作用......所以它只是显示一个死电影剪辑。为什么会这样???

我还尝试将 onBackhomeBtnClicked 函数放在 main.as 中,以便所有 homeScreen 函数都在那里,并且按钮可能会起作用......但在这种情况下,我什至无法正确删除和添加屏幕

【问题讨论】:

你在哪里添加LivrmScreen?即LivrmScreen的父级是什么? 【参考方案1】:

您的代码逻辑存在缺陷。我不想深入探讨 OOP 原则,也不想告诉你使用处理这类事情的框架。

这里有一个便宜又快捷的方法:

在 Main.as 中

private function goToLivrScreen(e:Event = null):void

    var livrScreen:LivrScreen = new LivrScreen();
    livrScreen.addEventListener("onClose", onLivrScreenClose);
    addChild(livrScreen);

private function onLivrScreenClose(e:Event = null):void

    removeChild(e.currentTarget as DisplayObject);
    // add code to show main menu or whatever you wanted

在 LivrScreen.as 中

backhomeBtn.addEventListener(MouseEvent.CLICK, onBackhomeBtnClicked);

和处理程序

private function onBackhomeBtnClicked(evt:MouseEvent):void

    // remove all listeners from all object that you have so your LivrScreen could be garbage collected
    // when done just dispatch the Event that Main.as is waiting for
    dispatchEvent(new Event("onClose"));

这是一种非常粗略的方法,可以进行许多改进,但它会使您的代码更简洁,并希望在您想要添加新屏幕或更改某些实现时更具可扩展性。

【讨论】:

如果这回答了您的问题,请将问题标记为已回答并投票,以便其他有相同问题的人可以看到解决方案。很高兴我能帮上忙,祝你好运;)

以上是关于删除这个孩子并添加新的孩子 AS3的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个节点有自己的孩子?

ActionScript 3 AS3获取MC的所有孩子

红黑树的删除

删除子 SKSpriteNode

三个js孩子长

ActionScript 3 - 在舞台上添加和删除孩子