Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Вторник, 23.12.2025, 00:52
Главная » Статьи » Уроки ActionScript

Урок 10-1. Преобразование типов данных
Преобразовать значение – означает изменить его тип, либо физическая смена одного типа значения на другой, либо просто изменение типа привязки, предоставленного для этого значения. Для некоторых базовых значений преобразование приведет к смене настоящего значения. Например, преобразование значения String в Number создаст новое базовое значение Number из оригинальной строки. Применительно к объектам можно только изменить тип привязки, предоставляемой для переменной, которая ссылается на этот объект, а объект может быть ассоциирован с типом, которым он сам не является. Экземплярам MovieClip может быть присвоен тип DisplayObject, так как MovieClip является наследником объекта DisplayObject (DisplayObject является подтипом). Но MovieClip не может быть присвоен тип Arrays, так как класс MovieClip не является наследником класса Array (и поэтому экземпляры MovieClip не являются экземплярами Array, так как они являются экземплярами DisplayObject).

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

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

// Cast an object typed as Object to MovieClip
var typedAsMovieClip:MovieClip = MovieClip(typedAsObject);

Эта форма преобразования типа до сих пор доступна в ActionScript 3. В отличие от ActionScript 2, если эта форма преобразования срывается, флеш-плеер выдает ошибку.

// Try to cast an Array to MovieClip
var typedAsMovieClip:MovieClip = MovieClip(typedAsArray);
// Error: Type Coercion failed

ActionScript 3 также предоставляет новую форму преобразования с использованием нового ключевого слова as. Ключевое слово as идет за переменной, за которой следует тип. Итоговое значение является новым преобразованным значением, либо равно null, если преобразование срывается.
 
// Cast an object typed as Object to MovieClip
var typedAsMovieClip:MovieClip = typedAsObject as MovieClip;

В отличие от других форм преобразования типов, при сбое преобразований никаких ошибок не выдается.

// Try to cast an Array to MovieClip
var typedAsMovieClip:MovieClip = typedAsArray as MovieClip;
trace(typedAsMovieClip); // traces null, no error

Используя as, можно предотвратить появление не желаемых ошибок. Тем не менее, преобразование с помощью as, медленнее по производительности. Если вы уверены, что у вас есть переменная преобразованного типа, то таким образом можно избежать использования as. Преобразование с помощью as является удобным, когда ожидается сбой преобразования и возможность получения значений null.

Преобразование в динамические классы


Будьте осторожны при использовании переменных, имеющих тип динамических классов. Так как экземпляру динамического класса может быть назначена любая переменная, ошибки, связанные с доступом к свойству, не зависят от его типа. Для динамических экземпляров информация о типе применяется только там, где используется это значение, а не как используются его свойства. Поэтому, если вы попытаетесь ввести экземпляр Date (Date является динамическим) в метод, который принимает только значения Number, произойдет ошибка. Тем не менее, попытка получить доступ к свойству doesNotExist из экземпляра Date не приведет к ошибке, так как этот экземпляр является экземпляром динамического класса.

С точки зрения преобразования и доступа к специальным свойствам, особенно применительно к клипам, это может быть преимуществом. Так как класс MovieClip является динамическим, то пока у вас есть экземпляр, наследующий от MovieClip, вы можете преобразовывать ссылку на этот экземпляр в качестве MovieClip и получать из него доступ к любому свойству. Это особенно полезно для экземпляров символов клипа из библиотеки, которые могут иметь переменные, определенные в них, но не имеют никакого класса, определенного в свойствах связи. Хотя экземпляр действующего символа клипа не является прямым экземпляром MovieClip, вы можете преобразовать ссылку на этот экземпляр в качестве MovieClip и получить из него доступ к любому свойству, какому захотите.

// myClip is an instance of a movie clip symbol 
// with custom variable definition
MovieClip(myClip).anyProperty; // OK since MovieClip is dynamic

Вероятнее всего, использование преобразования в MovieClip будет происходить для преобразования свойства parent, так как оно имеет тип DisplayObjectContainer, и вероятнее всего вы захотите ссылаться на методы MovieClip из клипов-родителей. Если вы используете очень длинную ссылку, вы можете захотеть перейти к концу этой ссылки прямо к точке, в которой существует свойство MovieClip.

// Cast long reference to MovieClip
MovieClip(parent.parent.parent).play();

Категория: Уроки ActionScript | Добавил: anti_k (26.02.2010)
Просмотров: 1579 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]