Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   FullScreen и ESCAPE (http://www.flasher.ru/forum/showthread.php?t=209187)

djken 18.10.2014 02:30

FullScreen и ESCAPE
 
Привет всем. Пишу десктопное приложение.
В приложении нужно реализовать кнопку FullScreen. У кнопки есть два состояния - перейти в полноэкранный режим и перейти в нормальный. Тут все просто, все работает:

Код AS3:

btnFullScreen.addEventListener(MouseEvent.CLICK, btnFullScreenHandler);
 
private function btnFullScreenHandler(e:MouseEvent):void {
        if (stage.displayState == StageDisplayState.FULL_SCREEN){
                stage.displayState = StageDisplayState.NORMAL;
                btnFullScreen.mc.gotoAndStop("s2");
        } else {
                stage.displayState = StageDisplayState.FULL_SCREEN;
                btnFullScreen.mc.gotoAndStop("s1");
        }
 
}

Но есть проблема - по умолчанию из полноэкранного режима можно выходить по нажатию на клавишу "Esc", либо переключать состояния комбинацией "Ctrl + F". Как в данной ситуации менять состояние кнопки FullScreen?

Технически понятно - нужно отлавливать события клавиатуры. Но не всегда срабатывает - через раз. В чем ошибка? Либо есть другие варианты реализовать полноценную кнопку FullScreen?

Код AS3:

addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
 
private function keyDownHandler(e:KeyboardEvent):void {
        if (e.keyCode == Keyboard.ESCAPE){
                if (stage.displayState == StageDisplayState.FULL_SCREEN){
                        btnFullScreen.mc.gotoAndStop("s2");
                }
        };
}


MikroAcse 18.10.2014 02:55

e.preventDefault() не сработает?

djken 18.10.2014 10:51

Решил проблему более рациональным путем, используя FullScreenEvent. Зачем ловить нажатия клавиш, если достаточно ловить событие FullScreenEvent )

Класс для панели меню:

Код AS3:

package  {
 
        import flash.display.Sprite;
        import flash.display.StageDisplayState;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.events.FullScreenEvent;
 
        public class MainMenu extends Sprite {
 
                public function MainMenu() {
                        bg.alpha = 0.6;
                        addEventListener(Event.ADDED_TO_STAGE, addToStageHandler);
                }
 
                private function addToStageHandler(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, addToStageHandler);
                        stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);
                        btnFullScreen.addEventListener(MouseEvent.CLICK, btnFullScreenClick);
                }
 
                private function fullScreenRedraw(e:FullScreenEvent):void {
                        if (e.fullScreen) {
                                btnFullScreen.s2();
                        }
                        else {
                                btnFullScreen.s1();
                        }
                }
 
                private function btnFullScreenClick(e:MouseEvent):void {
                        stage.displayState = (stage.displayState == StageDisplayState.FULL_SCREEN) ? StageDisplayState.NORMAL : StageDisplayState.FULL_SCREEN;
                }
 
        }
 
}

Класс для кнопок:

Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
 
        public class BtnMenu extends MovieClip {
 
                private var defaultAlpha = 0.4;
 
                public function BtnMenu() {
                        alpha = defaultAlpha;
                        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
                        gotoAndStop(name);
                        buttonMode = true;
                }
 
                private function onMouseOver(e:MouseEvent):void {
                        alpha = 0.8;
                }
 
                private function onMouseOut(e:MouseEvent):void {
                        alpha = defaultAlpha;
                }
 
                public function s2():void {
                        mc.gotoAndStop("s2");
                }
 
                public function s1():void {
                        mc.gotoAndStop("s1");
                }
        }
 
}



Часовой пояс GMT +4, время: 18:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.