2013-08-04 2 views
0

Я хочу, чтобы добиться этого в моей игре http://www.emanueleferonato.com/2011/03/29/pausing-a-flash-game-or-movie-detecting-its-focus/ребенок не показан на Event.DEACTIVATE

все отлично работает (игра приостановлена), но экран не «обращается», но если я двигаю курсор на швейцарских франков появится экран

private function onDeactivate(e:Event):void { 
      pauseGame=true; 
      addChild(FocusScreen); 
      if(musicOn==true){ 
       musicCh.stop(); 
      } 
      stage.frameRate = 0; 
     } 

UPDATE: это происходит только тогда, когда я ступень фреймрейт до 0 это работает, но мне нужно установить фреймрейт 0

private function onDeactivate(e:Event):void { 
       pauseGame=true; 
       addChild(FocusScreen); 
       if(musicOn==true){ 
        musicCh.stop(); 
       } 
      } 
+1

показывая ваш код может быть хорошим началом –

+0

обновленный мой вопрос –

+1

почему фреймрейт нужно быть равна нулю? Как утверждает tut, он автоматически уменьшает его до 2 кадров в секунду, если он не активен –

ответ

1

вызов e.updateAfterEvent() после установки частоты кадров сцены. Это приводит к одному перерисовке сцены, после чего частота кадров сцены устанавливается на 0, и этап не перерисовывается, пока вы не восстановите частоту кадров.

Обновление: по-видимому, это ошибка в Flash Player 11.3 (возможно, больше FP11), которая не была на месте с FP10, поэтому «голый» подход, как в учебнике, работал для меня, когда я использовал отладчик FP10, который поставляется с FlashDevelop, но не работает, когда я пробовал его в своем FF с установленной FP11.3. Итак, обходной путь заключается в следующем: добавьте в свой код фиктивный объект Sprite, не добавляйте его нигде, он будет служить получателем пользовательского события MouseEvent с единственной целью - позвонить updateAfterEvent(). Это помогло мне отобразить пользовательский DisplayObject, который означает приостановленное состояние.

private var pausedRecipient:Sprite=new Sprite(); 
// do not add child so that its listener won't trigger on user input 
pausedRecipient.addEventListener(MouseEvent.CLICK,uae); 
private function uae(e:MouseEvent):void {e.updateAfterEvent();} 
private function onDeactivate(e:Event):void { 
      pauseGame=true; 
      addChild(FocusScreen); 
      if(musicOn==true){ 
       musicCh.stop(); 
      } 
      pausedRecipient.dispatchEvent(
       new MouseEvent(MouseEvent.CLICK,true, true, -1, -1, stage)); 
      //^this does the trick of indirect call of updateAfterEvent() 
     } 
+0

updateafterevent() доступен только как метод классов timerevent, mouseevent и keyboardevent –

+0

Хмм. Правильно. Хорошо, обновление. – Vesper

+0

@SeleiLaurentiu Кстати, мне удалось сломать учебный фильм, нажав Tab. Возможно, активировать/деактивировать события просто не то, что нужно. – Vesper

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

  • Нет связанных вопросов^_^