SWF Maestro: универсальный компилятор для создания приложений, игр, хранителей экрана из SWF файлов

Пример: Хранитель экрана с настройками

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

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

  1. Откройте SWF Maestro (SCR).
  2. Нажмите “Новый из..” и выберите проектный файл, который мы создали в прошлом примере. Это позволит нам использовать существующий проект как шаблон.
  3. Откройте “Файлы > Файлы для компиляции”.
  4. Укажите путь к файлу “Screensaver2.swf” в “Tutorials\Screensaver2” директории. Этот файл использует ‘FSCommand(“storage.get”,””)’ – вызов, чтобы узнать: должен ли быть шар зеленым или серым.
  5. Включите опцию “Меню настроек” и укажите путь к файлу “Settings.swf”, который позволит пользователю выбрать цвет шара. Этот файл использует ‘FSCommand(“storage.set”,””)’ – вызов, чтобы запомнить выбранный цвет.
  6. Нажмите “Сохранить как...”, чтобы сохранить проект.
  7. Скомпилируйте хранитель экрана.
  8. Скопируйте получившийся SCR-файл в поддиректорию System32 в директории, где установлена Windows.
  9. Зайдите в “Display” – настройки и выберите Ваш хранитель экрана из списка.
  10. Нажмите “Settings”, чтобы выбрать цвет, а затем “Preview”.

FLA-файлы хранителя экрана, из которых были созданы “Screensaver2.swf” и “Settings.swf” Вы найдете в директории 'Tutorials\FLAs'.

Описание Screensaver2.swf:

Состоит из 100 кадров.
1-й кадр содержит ActionScript:

stop();
var isGreen="N";
function watchCallback (id, oldval, newval) {
  if(newval!="Y") {
            gotoAndPlay(10);
  } else {
            gotoAndPlay(60);
  }
};

_root.watch("isGreen", watchCallback);
fscommand("storage.get","Green,isGreen");

Комментарии:
stop();
Останавливаем воспроизведение, чтобы инициализировать хранитель экрана и решить: какую часть ролика воспроизводить.

var isGreen="N";
Инициализируем переменную, в которую будем читать: выбран ли зеленый цвет.

function watchCallback (id, oldval, newval)
Эта функция будет исполнена сразу после прочтения записи из хранилища настроек. Она анализирует значение записи и переходит к 10му кадру, если не выбран зеленый цвет, иначе – переходит к 60му кадру.

_root.watch("isGreen", watchCallback);
Этим вызовом watch-функции мы регистрируем прослушивание переменной isGreen. Когда переменная получит значение, произойдет вызов нашей watchCallback-функции.

fscommand("storage.get","Green,isGreen");
Этим вызовом мы читаем значение Green из хранилища настроек и присваиваем его переменной isGreen.

Примечание. Мы не можем просто прочитать значение с помощью FSCommand(“storage.get”,””) и перейти к нужному кадру, т.к. FSCommand-функция асинхронная и возвращает исполнение немедленно, до фактического получения значения. Поэтому требуется вводить «прослушивающую» функцию, которая исполняется после получения значения.

Кадры 10-50:
Анимация скачущего серого шара.

50 кадр также содержит ActionScript для зацикливания анимации:

gotoAndPlay(10);

Кадры 60-100:
Анимация скачущего зеленого шара.

100 кадр также содержит ActionScript для зацикливания анимации:

gotoAndPlay(60);

Описание Settings.swf:

Состоит из одного кадра.
Кадр содержит два RadioButton’а: option1 (серый шар) и option2 (зеленый шар).
Option1 содержит ActionScript:

on (release) {
            fscommand("storage.set","Green,N");
}

Option2 содержит ActionScript:

on (release) {
            fscommand("storage.set","Green,Y");
}

Когда пользователь выбирает первую опцию, в хранилище настроек помещается “Green” со значением “N”. Когда выбирает вторую – помещается “Green” со значением “Y”.

Также кадр содержит ActionScript для инициализации опций:

stop();
var isGreen="N";

function watchCallback (id, oldval, newval) {
  if(newval!="Y") {
            option1.setState(true);
  } else {
            option2.setState(true);
  }
};

_root.watch("isGreen", watchCallback);
fscommand("maestro.storage.get","Green,isGreen");