Установка свойств рабочей области

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Класс Stage переопределяет большинство свойств и методов класса DisplayObject. При вызове переопределенных свойств или методов Flash Player и AIR выдают исключение. Например, объект Stage лишен свойств x или y, поскольку его положение в качестве основного контейнера приложения фиксировано. Свойства x и y связаны с позицией экранного объекта по отношению к его контейнеру. Поскольку Stage не содержится в другом контейнере экранного объекта, эти свойства неприменимы.

Примечание. Некоторые свойства и методы класса Stage доступны только для экранных объектов, которые находятся в той же изолированной программной среде, что и загруженный SWF-файл. Дополнительные сведения см. в разделе «Безопасность рабочей области».

Управление частотой кадров при воспроизведении

Свойство framerate класса Stage используется для установки частоты кадров для всех SWF-файлов, загруженных в приложение. Дополнительные сведения см. в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform.

Управление масштабом рабочей области

Когда изменяется размер части экрана, занимаемой проигрывателями Flash Player или AIR, содержимое среды выполнения автоматически корректируется в соответствии с изменениями. Свойство scaleMode класса Stage определяет метод корректировки содержимого. Это свойство может принимать 4 разных значения, которые определяются как константы в классе flash.display.StageScaleMode:

  • StageScaleMode.EXACT_FIT изменяет масштаб SWF для заполнения рабочей области с новыми размерами без учета исходного соотношения сторон. Коэффициенты масштабирования по ширине и высоте могут отличаться, поэтому если соотношение сторон изменится, содержимое может выглядеть сжатым или растянутым.

  • StageScaleMode.SHOW_ALL изменяет масштаб SWF для заполнения всей рабочей области с новыми размерами без изменения соотношения сторон содержимого. При данном режиме масштабирования отображается все содержимое, но возможно появление границ «letterbox», например черных полос, которые появляются при просмотре широкоэкранного фильма на стандартном телевизоре.

  • StageScaleMode.NO_BORDER изменяет масштаб SWF для заполнения всей рабочей области с новыми размерами без изменения соотношения сторон содержимого. Данный режим масштабирования позволяет полностью использовать область отображения рабочей области, однако содержимое при этом может обрезаться.

  • StageScaleMode.NO_SCALE не изменяет масштаб SWF. Если новая рабочая область имеет меньшие размеры, содержимое обрезается. Если она имеет большие размеры, добавленное пространство будет пустым.

    В режиме масштабирования StageScaleMode.NO_SCALE и ни в каком другом свойства Width и Height класса Stage можно использовать для определения фактических размеров измененной рабочей области в пикселах. При других режимах масштабирования свойства stageWidth и stageHeight всегда отражают исходную длину и ширину SWF-файла. Кроме того, когда свойству scaleMode присвоено значение StageScaleMode.NO_SCALE, а размер SWF-файла изменяется, отправляется событие resize класса Stage, позволяющее внести корректировки соответствующим образом.

    Следовательно, если scaleMode имеет значение StageScaleMode.NO_SCALE, это позволяет при желании точнее управлять корректировкой содержимого экрана, зависящей от изменения размеров экрана. Например, в SWF-файле, содержащем видеоролик и строку управления, может потребоваться сохранять размер строки управления при изменении размера рабочей области. При этом размер окна показа видеофайла изменяется в соответствии с изменением размера рабочей области. Это демонстрируется в следующем примере.

    // videoScreen is a display object (e.g. a Video instance) containing a 
    // video; it is positioned at the top-left corner of the Stage, and 
    // it should resize when the SWF resizes. 
     
    // controlBar is a display object (e.g. a Sprite) containing several 
    // buttons; it should stay positioned at the bottom-left corner of the 
    // Stage (below videoScreen) and it should not resize when the SWF 
    // resizes. 
     
    import flash.display.Stage; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
     
    var swfStage:Stage = videoScreen.stage; 
    swfStage.scaleMode = StageScaleMode.NO_SCALE; 
    swfStage.align = StageAlign.TOP_LEFT; 
     
    function resizeDisplay(event:Event):void 
    { 
        var swfWidth:int = swfStage.stageWidth; 
        var swfHeight:int = swfStage.stageHeight; 
     
        // Resize the video window. 
        var newVideoHeight:Number = swfHeight - controlBar.height; 
        videoScreen.height = newVideoHeight; 
        videoScreen.scaleX = videoScreen.scaleY; 
         
        // Reposition the control bar. 
        controlBar.y = newVideoHeight; 
    } 
     
    swfStage.addEventListener(Event.RESIZE, resizeDisplay);

Настройка режима масштабирования рабочей области для окон AIR

Свойство scaleMode объекта Stage определяет, как рабочая область масштабирует и обрезает дочерние экранные объекты при изменении размеров окна. В AIR следует использовать только режим noScale. В этом режиме рабочая область не масштабируется. Вместо этого размер рабочей области изменяется непосредственно вместе с границами окна. При уменьшении размера окна, объекты могут обрезаться.

Режимы масштабирования рабочей области предназначены для использования в таких средах, как веб-браузер, где не всегда есть возможность управлять размером или соотношением сторон рабочей области. Эти режимы позволяют выбирать наименее искаженный вариант, когда рабочая область не соответствует идеальному размеру или соотношению сторон окна приложения. В приложении AIR вы всегда управляете рабочей областью, поэтому в большинстве случаев повторное размещение содержимого или просто корректировка размеров окна дадут лучшие результаты, чем масштабирование рабочей области.

В браузере и в начальном окне AIR соотношение между размером окна и начальным фактором масштабирования считывается из загруженного SWF-файла. Однако при создании объекта NativeWindow среда AIR выбирает произвольное соотношение между размером окна ил фактором масштабирования 72:1. Таким образом, если размер окна составляет 72x72 пиксела, квадрат 10x10, добавляемый в окно, отрисовывается с правильным размером 10x10 пикселов. Однако если размер окна составляет 144x144 пиксела, квадрат 10x10 масштабируется до размера 20x20 пикселов. Если все же требуется использовать режим scaleMode, а не noScale для рабочей области окна, в качестве компенсации можно задать для всех экранных объектов в окне фактор масштабирования 72 пикселов к текущей ширине и высоте рабочей области. Например, следующий код вычисляет необходимый фактор масштабирования для экранного объекта с именем client.

if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){ 
client.scaleX = 72/newWindow.stage.stageWidth; 
client.scaleY = 72/newWindow.stage.stageHeight; 
}
Примечание. Окна Flex и HTML автоматически задают свойству scaleMode объекта Stage значение noScale. Изменение свойства scaleMode мешает работе механизмов автоматической компоновки, применяемых в окнах этих типов.

Работа в полноэкранном режиме

Полноэкранный режим позволяет рабочей области ролика заполнить весь экран без каких-либо границ контейнера или меню. Свойство класса Stage displayState используется для входа и выхода из полноэкранного режима показа SWF-файла. Свойству displayState можно присвоить одно из значений, определенных для констант в классе flash.display.StageDisplayState. Чтобы включить полноэкранный режим, присвойте свойству displayState значение StageDisplayState.FULL_SCREEN:

stage.displayState = StageDisplayState.FULL_SCREEN; 

В Flash Player к полноэкранному режиму можно перейти с помощью ActionScript только в ответ на щелчок мышью (включая правую кнопку) или нажатие клавиши. Содержимое AIR, которое выполняется в изолированной программной среде, не требует перехода к полноэкранному режиму в ответ на жест пользователя.

Чтобы выключить полноэкранный режим, присвойте свойству displayState значение StageDisplayState.NORMAL.

stage.displayState = StageDisplayState.NORMAL; 

Кроме того, пользователь может выходить из полноэкранного режима путем смещения фокуса на другое окно или с помощью одного из нескольких сочетаний клавиш: Esc (все платформы), Control-W (Windows), Command-W (Mac) или Alt-F4 (Windows).

Включение полноэкранного режима в Flash Player

Для включения полноэкранного режима для SWF-файла, встроенного в HTML-страницу, код HTML, встраиваемый в Flash Player, должен включать тег param, атрибут embed с именем allowFullScreen и значение true, как указано ниже:

<object> 
    ... 
    <param name="allowFullScreen" value="true" /> 
    <embed ... allowfullscreen="true" /> 
</object>

В инструменте разработки Flash выберите «Файл» > «Параметры публикации» и в открывшемся окне на вкладке «HTML» укажите шаблон «Только Flash — разрешить полноэкранный режим».

В Flex проверьте, что шаблон HTML включает теги <object> и <embed>, поддерживающие полноэкранный режим.

Если на веб-странице при создании тегов для встраивания SWF-файлов используется язык JavaScript, то для добавления тега allowFullScreen param и атрибута необходимо лишь изменить JavaScript. Например, если в вашей HTML-странице используется функция AC_FL_RunContent() (которая применяется на страницах HTML, созданных с помощью Flash Professional и Flash Builder), необходимо следующим образом добавить параметр allowFullScreen к этому вызову функции:

AC_FL_RunContent( 
    ... 
    'allowFullScreen','true', 
    ... 
    ); //end AC code

Это не относится к SWF-файлам, запущенным в автономной программе Flash Player.

Примечание. Если для режима окна (wmode в HTML) выбрать значение «Непрозрачный безоконный» (opaque) или «Прозрачный безоконный» (transparent), окно в полноэкранном режиме всегда будет непрозрачным.

Существуют также ограничения системы безопасности на использование полноэкранного режима Flash Player в обозревателе. Эти ограничения описаны в разделе «Безопасность».

Полноэкранный режим и масштабирование

Свойства Stage.fullScreenHeight и Stage.fullScreenWidth возвращают высоту и ширину монитора, которые используются при переходе к размеру во весь экран, если он выполняется немедленно. Эти значения могут быть неправильными, если пользователь имеет возможность переместить браузер с одного монитора на другой после получения этих значений, но до перехода в полноэкранный режим. Если эти значения были получены в том же обработчике событий, где свойству Stage.displayState было присвоено значение StageDisplayState.FULL_SCREEN, то значения являются верными. При наличии нескольких подключенных мониторов, содержимое SWF полностью займет только один из них. Flash Player и AIR используют метрику, чтобы определить, какой из мониторов содержит большую часть SWF-файла, выбирая этот монитор для полноэкранного режима. Свойства fullScreenHeight и fullScreenWidth только отражают размер монитора, используемого для полноэкранного режима. Дополнительные сведения см. в описаниях свойств Stage.fullScreenHeight и Stage.fullScreenWidth в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform.

Масштабирование рабочей области в полноэкранном режиме протекает так же, как и в обычном режиме. Масштабирование управляется свойством scaleMode класса Stage. Если свойству scaleMode присвоено значение StageScaleMode.NO_SCALE, свойства stageWidth и stageHeight рабочей области изменяются, отражая размер области экрана, занятой SWF-файлом (в данном случае это весь экран). При просмотре в обозревателе параметр HTML управляет этой настройкой.

Событие fullScreen класса Stage используется, чтобы узнать, включен или выключен полноэкранный режим, и среагировать соответствующим образом. Например, может потребоваться изменить положение, добавить или удалить элементы с экрана при переходе к полноэкранному режиму или выходе из него как в этом примере:

import flash.events.FullScreenEvent; 
 
function fullScreenRedraw(event:FullScreenEvent):void 
{ 
    if (event.fullScreen) 
    { 
        // Remove input text fields. 
        // Add a button that closes full-screen mode. 
    } 
    else 
    { 
        // Re-add input text fields. 
        // Remove the button that closes full-screen mode. 
    } 
} 
 
mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);

Как показано в этом коде, объект события для события fullScreen является экземпляром класса flash.events.FullScreenEvent, включающего свойство fullScreen, которое указывает, включен ли полноэкранный режим (true) или нет (false).

Поддержка клавиатуры в полноэкранном режиме

При запуске Flash Player в обозревателе в полноэкранном режиме все сценарии ActionScript, связанные с использованием клавиатуры, например события клавиатуры или ввод текста в экземпляры TextField, отключаются. Исключениями (клавиши, которые остаются доступными) являются:

  • Клавиши, не содержащие букв или цифр, а именно стрелки, пробел и клавиша табуляции

  • Сочетания клавиш, используемые для выхода из полноэкранного режима: Esc (Windows и Mac), Control-W (Windows), Command-W (Mac), и Alt-F4

Данные ограничения не действуют для содержимого SWF, выполняемого в автономном Flash Player или в приложении AIR. AIR поддерживает интерактивный полноэкранный режим, который допускает ввод с клавиатуры.

Аппаратное масштабирование в полноэкранном режиме

Свойство fullScreenSourceRect класса Stage можно использовать для того, чтобы заставить Flash Player или AIR масштабировать определенную зону рабочей области, переведя ее в режим полноэкранного показа. При наличии такой возможности Flash Player и AIR используют аппаратное масштабирование средствами доступного в системе пользователя видеоадаптера, что позволяет отображать содержимое быстрее, чем при использовании программного масштабирования.

Чтобы использовать аппаратное масштабирование, необходимо задать полноэкранный режим для всей рабочей области или ее части. Следующий код ActionScript 3.0 задает полноэкранный режим для всей рабочей области.

import flash.geom.*;  
{ 
    stage.fullScreenSourceRect = new Rectangle(0,0,320,240); 
    stage.displayState = StageDisplayState.FULL_SCREEN; 
}

Когда этому свойству присвоено значение допустимого прямоугольника, а свойство displayState настроено на полноэкранный режим, проигрыватель Flash Player и AIR масштабируют заданную область. Фактический размер рабочей области в пикселах в ActionScript не изменяется. Flash Player и AIR используют ограничение минимального размера прямоугольника при показе стандартного сообщения «Нажмите «Esc» для выхода из полноэкранного режима». Обычно минимальный размер составляет около 260 на 30 пикселов, но он может варьироваться в зависимости от платформы и версии Flash Player.

Свойство fullScreenSourceRect можно настраивать, только когда проигрыватель Flash Player или AIR не находится в полноэкранном режиме. Для правильной работы этого свойства, необходимо сначала настроить именно его, а затем настроить свойство displayState на работу в полноэкранном режиме.

Чтобы включить масштабирование, задайте для свойства fullScreenSourceRect объект прямоугольника.

stage.fullScreenSourceRect = new Rectangle(0,0,320,240);

Чтобы отключить масштабирование, присвойте свойству fullScreenSourceRect значение null.

stage.fullScreenSourceRect = null;

Чтобы задействовать все возможные аппаратные функции ускорения в Flash Player, включите их в диалоговом окне «Свойства Flash Player». Чтобы открыть диалоговое окно с настройками, щелкните правой кнопкой мыши (Windows) или осуществите щелчок правой кнопкой мыши при зажатой клавише Control (Mac) по содержимому Flash Player в вашем обозревателе. Перейдите на первую вкладку, «Отображение», и установите флажок «Включить аппаратное ускорение».

Режимы окна: прямой и совмещенный с использованием графического процессора

В проигрыватель Flash Player 10 добавлено два режима окна: прямой и совмещенный с использованием графического процессора, которые можно включить через параметры публикации в инструменте разработки Flash. Эти режимы не поддерживаются в AIR. Для использования этих режимов необходимо включить аппаратное ускорение в проигрывателе Flash Player.

Прямой режим использует самый быстрый и наиболее прямой путь для вывода графики на экран, что полезно при воспроизведении видео.

Режим совмещения с использованием графического процессора ускоряет совмещение, используя графический процессор видеокарты. Совмещение видео — это процесс наложения нескольких слоев изображения для получения одного видеоизображения. Когда совмещение ускоряется с помощью графического процессора, оно может улучшить производительность YUV-преобразования, коррекции цвета, поворота или масштабирования и наложения YUV-преобразованием называется преобразование цветов композитных аналоговых сигналов, используемых для передачи, в модель цвета RGB (красный, зеленый, синий), которая используется видеокамерами и дисплеями. Использование графического процессора для ускорения совмещения сокращает потребление ресурсов памяти и процессора. Кроме того, это улучшает воспроизведение видео со стандартным разрешением.

Соблюдайте осторожность, применяя эти режимы окна. Совмещение с использованием графического процессора может интенсивно использовать память и ресурсы центрального процессора. Если некоторые операции (такие как режимы наложения, фильтрация, обрезание или маскирование) не могут выполняться графическим процессором, они выполняются программным обеспечением. Компания Adobe рекомендует добавлять не более одного SWF-файла на HTML-страницу, когда используются эти режимы. Кроме того, их не следует включать для баннеров. Функция «Тестировать ролик» инструмента разработки Flash не использует аппаратное ускорение, но его можно использовать, выбрав опцию «Просмотр публикации».

Не имеет смысла задавать в SWF-файле частоту кадров выше 60, то есть максимальной частоты обновления экрана. При использовании частоты кадров от 50 до 55 допускается пропуск кадров, который может время от времени происходить по разным причинам.

Для прямого режима требуется Microsoft DirectX 9 и 128 МБ видеопамяти на платформе Windows и OpenGL для Apple Macintosh, Mac OS X 10.2 и более поздних версий. Для режима совмещения с использованием графического процессора требуется поддержка Microsoft DirectX 9 и Pixel Shader 2.0 на платформе Windows с 128 МБ видеопамяти. На платформе Mac OS X и Linux для режима совмещения с использованием графического процессора требуется OpenGL 1.5 и несколько расширений OpenGL (объект буфера кадра, мультитекстурирование, объекты шейдеров, язык шейдера, шейдер фрагмента).

Режимы ускорения (direct и gpu) для отдельного SWF-файла можно активировать через диалоговое окно «Параметры публикации» в Flash в меню «Аппаратное ускорение» на вкладке «Flash». Если выбрать вариант «Нет», режим окна возвращается к значению default, transparent или opaque в соответствии с вариантом, выбранным на вкладке «HTML».