删除这个孩子并添加新的孩子 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的主要内容,如果未能解决你的问题,请参考以下文章