2014-11-24 12 views
0

это мой кодAS3: полноэкранный режим проблема

function btnClick (e:MouseEvent):void 
{ 
    if (stage.displayState == StageDisplayState.NORMAL) 
    { 
     stage.displayState = StageDisplayState.FULL_SCREEN; 
     bcgr.visible = true; 
     function imgZoom (e:MouseEvent):void 
     { 
      //zooming - code not relevant to my issue 
     } 
     stage.addEventListener (MouseEvent.MOUSE_WHEEL, imgZoom); 
    } 
    else 
    { 
     //option1: stage.removeEventListener (MouseEvent.MOUSE_WHEEL, imgZoom); 
     stage.displayState = StageDisplayState.NORMAL; 
     bcgr.visible = false; 
     //option2: stage.removeEventListener (MouseEvent.MOUSE_WHEEL, imgZoom); 
    } 
} 
mybtn.addEventListener (MouseEvent.CLICK, btnClick); 

У меня есть две проблемы в этом коде, который я не могу решить.

Прежде всего, когда я войти в FULL_SCREEN - modebcg.visible становится true и когда я выйти FULL_SCREEN - mode, нажав на mybtnbcg.visible становится false, но когда я выход, нажав escape это не делает. Как заставить его работать?

И, во-вторых, я не хочу удалять eventlistener imgZoom, когда я выхожу из FULL_SCREEN - mode. Но когда я размещаю removeLEventlistener как option1, тогда возврат обратно на NORMAL - mode не работает, и когда я размещаю removeLEventlistener как option2, тогда listener не удаляется?

Может ли кто-нибудь помочь?

ответ

1

Вы можете получать уведомления о полноэкранном режиме входа/выхода события путем добавления слушателя на сцену: stage.addEventListener(FullScreenEvent.FULL_SCREEN, ...)

Вот ссылка на документацию Этап: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Stage.html#event:fullScreen

Для imgZoom вопроса вам нужно переместить за пределами функции btnClick. Переменная imgZoom является локальной для функции btnClick, поэтому она становится переопределенной каждый раз, когда вызывается функция. Это означает, что во второй раз, когда вы нажимаете кнопку imgZoom, вы принимаете undefined, и вы никогда не сможете удалить предыдущий прослушиватель событий.

Перемещение определения функции за пределами обработчика btnClick позволит вам удалить его позже.

Вот все вместе:

function imgZoom (e:MouseEvent):void 
{ 
    //zooming - code not relevant to my issue 
} 

function fullScreenListener (e:FullScreenEvent) 
{ 
    bcgr.visible = e.fullScreen; 
    if (e.fullScreen) 
    { 
     stage.addEventListener (MouseEvent.MOUSE_WHEEL, imgZoom); 
    } 
    else 
    { 
     stage.removeEventListener (MouseEvent.MOUSE_WHEEL, imgZoom); 
    } 
} 

function btnClick (e:MouseEvent):void 
{ 
    if (stage.displayState == StageDisplayState.NORMAL) 
    { 
     stage.displayState = StageDisplayState.FULL_SCREEN; 
    } 
    else 
    { 
     stage.displayState = StageDisplayState.NORMAL; 
    } 
} 

stage.addEventListener (FullScreenEvent.FULL_SCREEN, fullScreenListener); 
mybtn.addEventListener (MouseEvent.CLICK, btnClick); 
Смежные вопросы