2013-08-09 3 views
1

Я давно застрял в этом, Я работаю с Main.as и LivrmScreen.as и в основном LivrmScreen.as - игровой экран с другим мувиклипом действия происходит ... тогда у меня есть кнопка на LivrmScreen, что я хочу, чтобы удалить LivrmScreen себя и показать Homescreen (все функции Homescreen в Main.as)удалить этого ребенка и добавить нового ребенка AS3

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, потому что он не будет удален, когда он просто удалитChild ... , и из-за этого я добавил stage.addChild, чтобы на главном экране правильно отображаться.

, но затем, когда homeScreen показывает кнопку, на самом деле не работает ... так что она просто показывает мертвый мувиклип. почему это???

Я также попытался поместить функцию onBackhomeBtnClicked в main.as, думая, что все функции homeScreen есть, и, возможно, кнопки будут работать ... но в этом случае я не могу даже экраны удалить и добавить правильно

+0

Где вы добавляете 'LivrmScreen'? То есть, что является родителем 'LivrmScreen'? – puggsoy

ответ

1

В вашей логике кода есть недостатки. Я не хочу слишком углубляться в принципы ООП или предлагаю использовать рамки, которые позаботятся об этих вещах.

Вот дешевый и быстрый выход:

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

Это довольно грубый способ сделать это и re может быть много улучшений, но это сделает ваш код немного более чистым и, надеюсь, более масштабируемым, если вы хотите добавить новый экран или изменить некоторую реализацию.

+0

большое спасибо !! он отлично работает сейчас! – user2669451

+0

Если это отвечает на ваш вопрос, пожалуйста, отметьте вопрос, как ответили, и проголосуйте за него, чтобы другие с одинаковой проблемой могли увидеть решение. Рад, что я мог бы помочь, удачи;) –

Смежные вопросы