По умолчанию экземпляры символов фрагментов роликов в библиотеке документа Flash не могут создаваться динамически (то есть только с использованием ActionScript). Это вызвано тем, что каждый символ, экспортированный для использования в ActionScript, увеличивает размер SWF-файла. К тому же, некоторые символы не должны использоваться в рабочей области. По этой причине необходимо указать, что символ должен быть экспортирован для ActionScript, чтобы он стал доступным в ActionScript.
Экспорт символов для ActionScript
-
Выберите символ на панели «Библиотека» и откройте диалоговое окно «Свойства символа».
-
При необходимости активируйте дополнительные настройки.
-
В разделе «Связывание» установите флажок «Экспорт для ActionScript».
Это активирует поля «Класс» и «Базовый класс».
По умолчанию поле «Класс» заполняется названием символа без пробелов (например, символ с именем «Tree House» будет преобразован в «TreeHouse»). Чтобы указать, что символ должен использовать поведение пользовательского класса, введите в этом поле полное имя класса, включая пакет. Если требуется создавать экземпляры символа в ActionScript, но не нужно добавлять дополнительное поведение, имя класса можно оставить без изменений.
Поле «Базовый класс» по умолчанию заполнено значением
flash.display.MovieClip
. Если требуется, чтобы символ расширял функции другого пользовательского класса, вместо этого значения можно указать имя класса, если он расширяет класс Sprite (или MovieClip).
-
Нажмите кнопку «ОК», чтобы сохранить изменения.
Если на этом этапе Flash не может найти связанный SWC-файл или внешний файл ActionScript с определением указанного класса (например, если не требовалось добавлять дополнительное поведение для символа), отображается предупреждение:
Определение для этого класса не найдено в подкаталоге классов. Оно будет автоматически сгенерировано в SWF-файле при экспорте
.
Это предупреждение можно игнорировать, если библиотечный символ не требует уникальных функций в дополнение к возможностям класса MovieClip.
Если не предоставить для символа класс, Flash автоматически создаст для него класс, эквивалентный этому:
package
{
import flash.display.MovieClip;
public class ExampleMovieClip extends MovieClip
{
public function ExampleMovieClip()
{
}
}
}
Если требуется добавить для символа дополнительные возможности ActionScript, добавьте соответствующие свойства и методы в приведенную ниже структуру кода. Предположим, что имеется символ фрагмента ролика, содержащий круг с шириной и высотой 50 пикселов, и этот символ должен экспортироваться для ActionScript с классом Circle. При добавлении в файл Circle.as следующий код расширяет класс MovieClip и предоставляет для символа дополнительные методы
getArea()
и
getCircumference()
.
package
{
import flash.display.MovieClip;
public class Circle extends MovieClip
{
public function Circle()
{
}
public function getArea():Number
{
// The formula is Pi times the radius squared.
return Math.PI * Math.pow((width / 2), 2);
}
public function getCircumference():Number
{
// The formula is Pi times the diameter.
return Math.PI * width;
}
}
}
Следующий код, добавленный в ключевой кадр в кадре 1 документа Flash, создаст экземпляр символа и добавит его в список отображения.
var c:Circle = new Circle();
addChild(c);
trace(c.width);
trace(c.height);
trace(c.getArea());
trace(c.getCircumference());
Этот код демонстрирует создание экземпляров с помощью ActionScript вместо перетаскивания отдельных ресурсов в рабочую область. Код создает круг, который обладает всеми свойствами фрагмента ролика, а также пользовательскими методами, определенными в классе Circle. Это самый простой пример. Библиотечный символ может задавать любое количество свойств и методов в своем классе.
Создание экземпляров на базе ActionScript — это очень мощное средство, так как оно позволяет динамически создавать большое число экземпляров, что было бы утомительно делать вручную. Кроме того, этот метод обеспечивает гибкость, так как в ходе создания каждого экземпляра можно настроить его свойства. Чтобы полностью оценить эти преимущества, можно создать несколько экземпляров Circle с помощью цикла. Используя описанные ранее символ и класс Circle в библиотеке документа Flash, поместите следующий код в ключевой кадр первого кадра.
import flash.geom.ColorTransform;
var totalCircles:uint = 10;
var i:uint;
for (i = 0; i < totalCircles; i++)
{
// Create a new Circle instance.
var c:Circle = new Circle();
// Place the new Circle at an x coordinate that will space the circles
// evenly across the Stage.
c.x = (stage.stageWidth / totalCircles) * i;
// Place the Circle instance at the vertical center of the Stage.
c.y = stage.stageHeight / 2;
// Change the Circle instance to a random color
c.transform.colorTransform = getRandomColor();
// Add the Circle instance to the current timeline.
addChild(c);
}
function getRandomColor():ColorTransform
{
// Generate random values for the red, green, and blue color channels.
var red:Number = (Math.random() * 512) - 255;
var green:Number = (Math.random() * 512) - 255;
var blue:Number = (Math.random() * 512) - 255;
// Create and return a ColorTransform object with the random colors.
return new ColorTransform(1, 1, 1, 1, red, green, blue, 0);
}
Этот пример демонстрирует, как можно быстро создать и настроить несколько экземпляров символа с помощью кода. Каждый экземпляр размещается на базе текущего счетчика в цикле, и каждому из них присваивается произвольный цвет с помощью свойства
transform
(унаследованное классом Circle в результате расширения класса MovieClip).