Класс Stage переопределяет большинство свойств и методов класса DisplayObject. При вызове переопределенных свойств или методов Flash Player и AIR выдают исключение. Например, объект Stage лишен свойств
x
или
y
, поскольку его положение в качестве основного контейнера приложения фиксировано. Свойства
x
и
y
связаны с позицией экранного объекта по отношению к его контейнеру. Поскольку Stage не содержится в другом контейнере экранного объекта, эти свойства неприменимы.
Примечание.
Некоторые свойства и методы класса Stage доступны только для экранных объектов, которые находятся в той же изолированной программной среде, что и загруженный SWF-файл. Дополнительные сведения см. в разделе «
Безопасность рабочей области
».
Управление частотой кадров при воспроизведении
Управление масштабом рабочей области
Когда изменяется размер части экрана, занимаемой проигрывателями 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-файле, содержащем видеоролик и строку управления, может потребоваться сохранять размер строки управления при изменении размера рабочей области. При этом размер окна показа видеофайла изменяется в соответствии с изменением размера рабочей области. Это демонстрируется в следующем примере.
// mainContent is a display object containing the main content;
// 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 mainContent) 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 = mainContent.stage;
swfStage.scaleMode = StageScaleMode.NO_SCALE;
swfStage.align = StageAlign.TOP_LEFT;
swfStage.addEventListener(Event.RESIZE, resizeDisplay);
function resizeDisplay(event:Event):void
{
var swfWidth:int = swfStage.stageWidth;
var swfHeight:int = swfStage.stageHeight;
// Resize the main content area
var newContentHeight:Number = swfHeight - controlBar.height;
mainContent.height = newContentHeight;
mainContent.scaleX = mainContent.scaleY;
// Reposition the control bar.
controlBar.y = newContentHeight;
}
Настройка режима масштабирования рабочей области для окон 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 11.3), задайте свойство
displayState
со значением
StageDisplayState.FULL_SCREEN_INTERACTIVE
:
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
В 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 в обозревателе. Эти ограничения описаны в разделе «
Безопасность
».
Включение полноэкранного интерактивного режима в проигрывателе Flash Player 11.3 и более поздних версий
Проигрыватель Flash Player 11.3 и более поздних версий поддерживает полноэкранный интерактивный режим, который обеспечивает полную поддержку для всех клавиш (кроме
Esc
, которая завершает работу в полноэкранном интерактивном режиме). Полноэкранный интерактивный режим полезен в игровых приложениях (например, для включения чата в многопользовательской игре или элементов управления клавиатуры WASD в стрелялках с видом от первого лица).
Для включения полноэкранного интерактивного режима для SWF-файла, встроенного в HTML-страницу, код HTML, встраиваемый в Flash Player, должен включать тег
param
, атрибут
embed
с именем
allowFullScreenInteractive
и значение
true
, как указано ниже:
<object>
...
<param name="allowFullScreenInteractive" value="true" />
<embed ... allowFullScreenInteractive="true" />
</object>
В инструменте разработки Flash выберите «Файл» > «Параметры публикации» и в открывшемся окне на вкладке «HTML» укажите шаблон «Только Flash — разрешить полноэкранный интерактивный режим».
В Flash Builder и Flex убедитесь, что шаблоны HTML содержат теги
<object>
и
<embed>
, поддерживающие полноэкранный интерактивный режим.
Если на веб-странице при создании тегов для встраивания SWF-файлов используется язык JavaScript, то для добавления тега
allowFullScreenInteractive param
и атрибута необходимо лишь изменить JavaScript. Например, если в вашей HTML-странице используется функция
AC_FL_RunContent()
(которая применяется на страницах HTML, созданных с помощью Flash Professional и Flash Builder), необходимо следующим образом добавить параметр
allowFullScreenInteractive
к этому вызову функции:
AC_FL_RunContent(
...
'allowFullScreenInteractive','true',
...
); //end AC code
Это не относится к SWF-файлам, запущенным в автономной программе 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 поддерживает интерактивный полноэкранный режим, который допускает ввод с клавиатуры.
Поддержка мыши в полноэкранном режиме
По умолчанию события мыши в полноэкранном режиме происходят таким же образом, как и не в полноэкранном режиме. Однако в полноэкранном режиме можно установить необязательное свойство
Stage.mouseLock
, чтобы включить блокировку мыши. При блокировке мыши курсор отключается, и включается несвязанное движение мыши.
Примечание.
Блокировку мыши можно включить только в полноэкранном режиме для настольных приложений. При установке блокировки не в полноэкранном режиме или для приложений на мобильных устройствах будет возникать исключение.
Блокировка мыши автоматически отключается и курсор мыши снова становится видимым в следующих случаях:
-
Пользователь отключает полноэкранный режим нажатием клавиш Escape (все платформы), Control-W (Windows), Command-W (Mac) или Alt-F4 (Windows).
-
Окно приложения теряет фокус.
-
Любой пользовательский интерфейс настроек является видимым, включая все диалоговые окна конфиденциальности.
-
Показано собственное диалоговое окно, такое как диалоговое окно отправки файла.
События, связанные с движением мыши, такие как
mouseMove
, используют класс MouseEvent для представления объекта события. Если блокировка мыши отключена, для определения положения мыши используйте свойства
MouseEvent.localX
и
MouseEvent.localY
. Если блокировка мыши включена, для определения положения мыши используйте свойства
MouseEvent.movementX
и
MouseEvent.movementY
. Свойства
movementX
и
movementY
содержат изменения положения мыши, произошедшие с последнего события, вместо абсолютных координат положения мыши.
Аппаратное масштабирование в полноэкранном режиме
Свойство
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».
|
|
|