Статьи

Совет: растяните SWF с помощью Stage.ScaleMode

Что происходит, когда веб-сайт помещает ваш SWF в область, где он не подходит? В этом кратком совете вы узнаете, как управлять масштабом SWF.


Начните новый проект Flash и установите сцену шириной 350 пикселей и высотой 250 пикселей.

Создайте базовый класс документа (см. Этот краткий совет для получения дополнительной информации):

01
02
03
04
05
06
07
08
09
10
11
package
{
    import flash.display.Sprite;
    public class Main extends Sprite
    {
        public function Main()
        {
             
        }
    }
}

FLA (и SWC для тех, кто не использует Flash Pro) в zip-файле содержит два ресурса:

CheckedBackground того же размера, что и сцена, с точкой регистрации в верхнем левом углу.

Лицо , примерно половина ширины сцены, с точкой регистрации в центре.

Расположите их на сцене так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class Main extends Sprite
{
    private var checkedBackground:CheckedBackground;
    private var face:Face;
    public function Main()
    {
        checkedBackground = new CheckedBackground();
        checkedBackground.x = 0;
        checkedBackground.y = 0;
        this.addChild( checkedBackground );
         
        face = new Face();
        face.x = stage.stageWidth / 2;
        face.y = stage.stageHeight / 2;
        this.addChild( face );
    }
}

Запустите свой SWF:


Сделайте окно больше, сделайте его меньше, растяните его и пропорционально, и посмотрите, как меняется содержимое:

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


SHOW_ALL — режим масштабирования по умолчанию, но мы можем использовать еще три.

Импортируйте класс StageScaleMode :

1
import flash.display.StageScaleMode;

Он содержит статические константы, которые можно использовать для установки режима масштабирования. Давайте попробуем NO_BORDER ; добавьте эту строку в функцию конструктора:

1
stage.scaleMode = StageScaleMode.NO_BORDER;

Запустите свой SWF и растяните его снова:

Как следует из названия, NO_BORDER избегает эффекта почтового ящика. Содержимое остается пропорциональным, но всегда заполняет доступную область, даже если это означает обрезку краев.


Измените строку, которая устанавливает режим масштабирования, следующим образом:

1
stage.scaleMode = StageScaleMode.EXACT_FIT;

Попробуйте это:

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


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

1
stage.scaleMode = StageScaleMode.NO_SCALE;

Проверьте это:

С NO_SCALE содержимое не меняет размер вообще; они остаются в центре окна игрока, даже если это означает обрезку огромного количества краев или оставление массивных границ со всех сторон.


Stage.scaleMode позволяет вам контролировать, как будет выглядеть ваш SWF, если веб-сайт изменит размер доступной области. Это также полезно для создания приложений AIR и полноэкранных веб-сайтов; NO_SCALE является особенно хорошим выбором, поскольку (в сочетании с прослушивателем событий RESIZE) он позволяет разместить весь контент в окне, сохраняя при этом размер и пропорции отдельных ресурсов.

Подробнее об этом читайте в серии Фрэнси Зидара на полноэкранных масштабируемых веб-сайтах 🙂