我已经坚持了很长一段时间, 我正在使用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函数都在那里,也许按钮可以工作......但在这种情况下,我甚至无法将屏幕移除并正确添加
答案 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"));
}
这是一种非常简洁的方法,可以进行许多改进,但它会使您的代码更清洁,希望更具可扩展性,以防您想要添加新屏幕或更改某些实现。