1

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

4

1 回答 1

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"));
}

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

于 2013-08-10T06:24:39.527 回答