删除此子项并添加新子AS3

时间:2013-08-09 23:07:41

标签: actionscript-3 movieclip removechild addchild

我已经坚持了很长一段时间, 我正在使用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函数都在那里,也许按钮可以工作......但在这种情况下,我甚至无法将屏幕移除并正确添加

1 个答案:

答案 0 :(得分: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"));
}

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