Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 6:

Движемся дальше

Аннотация: Лекция посвящена описанию возможности динамической загрузки изображений. Также даётся довольно обширное описание объекта Stage, позволяющего разработчику получить доступ к пространству вокруг рабочего места.

Внимание! Для работы с этой лекцией необходимы учебные файлы, которые Вы можете загрузить здесь.

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

Для динамической загрузки рисунков потребуется создать предзагрузчик. Мы разберемся в том, как обрабатывать рисунки различных размеров, как расширить прототип slideTo, созданный ранее, чтобы изменять размер области просмотра. Мы также научимся применять объект Stage для управления интерфейсом и использовать общие объекты так, чтобы интерфейс мог хранить имена файлов рисунков для загрузки за определенный промежуток времени, а затем создадим интерфейс просмотра фотографий.

Объект Stage

Объект Stage является одним из наиболее мощных дополнений во Flash MX. Он позволяет нам получать доступ к пространству вокруг рабочего места, превращать его в окно браузера или самостоятельного проигрывателя, устанавливать его разрешение и использовать его пространство. Мы можем присваивать события для реакции на любое изменение в доступном месте и соответствующим образом переорганизовывать элементы. Для использования объекта Stage необходимо настроить HTML определенным образом. Как правило, при публикации фильма есть две возможности.

Согласно первой из них, фильм Flash отображается в реальном размере, и размер определяется разрешением фильма, образуя четкую границу на странице HTML. Для установки этого режима откройте диалоговое окно Publish Settings (File > Publish Settings) и выберите вкладку HTML. Установите в ниспадающем меню Dimensions значение Match Movie и в меню Scale значение Default (Show All).


Вторая возможность - растянуть фильм Flash так, чтобы он заполнял все доступное место. Для этого установите Dimensions на 100%, оставив для режима Scale установки по умолчанию.


Изменение размера рабочего места с помощью объекта Stage

Flash MX имеет еще одну возможность настройки параметров публикации Publishing Settings, которая разрешает пользователю настраивать размер браузера или окна проигрывателя Flash, причем объекты на рабочем месте будут также изменять свои размеры. Разберем, как реализовать эту возможность.

  1. Откройте новый фильм Flash с разрешением по умолчанию (550x400) и в диалоговом окне Publish Settings установите Dimensions на 100% и режим Scale на значение No Scale.
  2. Теперь нарисуйте что-нибудь вне рабочего места, т.е. в рабочей области.

    Открыв фильм в браузере или во Flash Player, вы увидите, что можно просматривать не только область на рабочем месте, но и определенную часть содержимого рабочей области, в зависимости от размеров окна вашего браузера.

    Так настраивается HTML, чтобы использовать объект Stage.

    Теперь посмотрим, как можно использовать это дополнительное пространство. Объект Stage довольно примитивен с точки зрения доступных в нем параметров и методов. Мы имеем доступ к ширине и высоте рабочего места, а также можем присваивать "приемники" для получения уведомлений об изменении размера рабочего места. Очень важно понимать, что Stage.Width и Stage.Height не ссылаются на разрешение, установленное нами для фильма, а связаны с доступным нам актуальным размером: размером отдельного окна Player или размером окна браузера. Сама по себе эта информация бесполезна, если не знать, какого размера было наше рабочее место.

  3. Чтобы узнать эти данные, нужно временно переключить режим размера рабочего места на значение showAll. В этом режиме разрешение рабочего места будет таким, какое указано в диалоговом окне Properties. Удалите все с рабочего места фильма, который мы только что создали, и введите следующий код в новый слой scripts.
    fscommand("allowscale", "false");
        // switch to showAll mode
        Stage.scaleMode = "showAll";
        Stage.originalWidth = Stage.Width;
        Stage.originalHeight = Stage.Height;
        // switch back to noScale
        Stage.scaleMode = "noScale"

    Мы только что добавили два дополнительных параметра в объект Stage: originalWidth и originalHeight. Мы также добавили команду allowscale = false, чтобы фильм не растягивался в режиме предварительного просмотра.

    Когда вокруг фильма имеется дополнительное место, координаты левого верхнего угла больше не равны (0,0). Теперь исходная область (рабочее место) нашего фильма сохраняет начальные координаты и находится в середине кадра, а координаты дополнительного места вокруг него связаны с ними. На следующем рисунке это показано графически.


    Серая область является рабочим местом размером 550x400 пикселей, с соответствующими координатами каждого из углов. Больший прямоугольник вокруг границы этой области представляет собой окно, в котором находится фильм, имеющее в данный момент размер 750x500 пикселей. Это на 200 пикселей шире нашего исходного фильма, и на 100 пикселей выше. Дополнительные пиксели добавляются равномерно на каждой стороне рабочего места, поэтому левый край видимой области находится на -100 (0-100) , правый край на 650 (550+100), верхний край на -50 (0-50) и нижний край на 450 (400+50).

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

    • Левый край: 0 минус половина Stage.Width минус исходная ширина.
    • Верхний край: 0 минус половина Stage.Height минус исходная высота.
    • Правый край: исходная ширина плюс половина Stage.Width минус исходная ширина.
    • Нижний край: исходная высота плюс половина Stage.Height минус исходная высота.
Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2