Временные шкалы во флеш состоят из одного или более кадров, которые
содержат графику, связанную с визуальными элементами, отображаемыми на
экране. Временная шкала с множеством кадров будет проходить через эти
кадры по мере проигрывания флеш фильма, показывающего анимацию.
В дополнение к графике временные шкалы так же могут содержать
ActionScript (наряду с якорями и ярлыками). Точнее кадры внутри
временной шкалы могут содержать ActionScript. Код, помещенный в каждый
кадр временной шкалы, запускается при отображении этого кадра на
экране. С ActionScript 1 и ActionScript 2 флеш работал с парадигмой,
которая по большому счету зависела от временной шкалы, как базы не
только для анимации, но также и ActionScript. Короче говоря, эта модель
была ограничивающей. ActionScript 3 отделился
от временной шкалы, а вместо этого помещает определения ActionScript в
отдельные определения класса, которые не зависят от временной шкалы.
Воспользуйтесь следующим классом ActionScript 2.
// ActionScript 2 definition in Example.as
class Example {
public var num:Number;
private var str:String = "text";
public function Example(){
num = 1;
} public function doubleNum():Void {
num *= 2; } }
FLA файл может использовать этот класс в кадре 1 основной временной шкалы с помощью следующего кода: // main timeline of ActionScript 2 FLA
var myExample:Example = new Example();
После
компиляции и опубликования в SWF файл, SWF файл получает код, который
прикрепляется к временной шкале и главным образом выглядит наподобие
этого:
// compiled version
_global.Example = function(){
this.num = 1;
}
Example.prototype.str = "text";
Example.prototype.doubleNum = function(){
this.num *= 2;
}
myExample = new Example();
Все
определения классов в ActionScript 2 после компиляции попадают на
основную временную шкалу в качестве определений ActionScript 1. И
действительно, если быть точнее, определения попадают в динамически
сгенерированные символы клипов, помещенные в библиотеку во время
компиляции. Тем не менее, внутри временных шкал этих клипов определения
создаются в блоке #initclip/#endinitclip, который, в
конечном счете, транслирует код в основную временную шкалу определения.
Другой способ – конечный результат является кодом, помещенным на
временную шкалу, который запускается при запуске этого кадра временной
шкалы.
В ActionScript 3 классы стали
изолированными определениями. Они не кончаются на временной шкале,
поэтому для того, чтобы временная шкала была определена, она должна
быть запущена. Фактически, противоположное происходит с кодом,
помещенным на временную шкалу в ActionScript 3. В этом экземпляре код
временной шкалы выводится за пределы временной шкалы и помещается в
определение класса, которое затем используется для определения
экземпляра временной шкалы. Просмотрите следующий код ActionScript 3,
помещенный на основной временной шкале во флеш.
var num:Number = 10;
function isOdd(num:Number):Boolean {
return Boolean(num % 2);
}
trace(isOdd(num));
После
компиляции этот код временной шкалы удаляется из нее, а вместо этого
помещается в определение класса, используемого для описания основной
временной шкалы.
package {
public class MainTimeline extends MovieClip {
public var num:Number;
public function MainTimeline(){
super();
addFrameScript(0, frame1);
}
public function isOdd(num:Number):Boolean {
return Boolean(num % 2);
}
public frame1(){
num = 10;
trace(isOdd(num));
}
}
}
Этот
класс используется потом, когда основная временная шкала подвергается
обработке. Помня это, будет немного проще понять, почему нельзя
определить переменную, или функцию, более одного раза в любом месте той
же временной шкалы. Если вы сделаете это, то у вас в классе будут
конфликтующие определения, которые генерируются из кода на временной
шкале.
|