Цитата:
|
Wolsh, может мне вообще отказаться от клипов, этих фреймов на таймлайне ?
|
От фреймов — да, желательно избавиться и начинать мыслить не "пришли в такой-то кадр", а "произошло такое-то событие". Но отказаться от клипов возможно только если они не нужны))) Если у Вас игра и куча анимаций врагов, взрывов, транспорта или порхающих сердечек и пукающих бабочками единорогов, возможно рановато отказываться от нарисованных во Flash мувиклипов.
Цитата:
|
при приведении чел в zack - человек может быть и как человек и как zack ?
|
Не путайте только приведение и кастинг
as. Кастинг это "проверка на пригодность", именно проверка, которая не меняет Тип (Класс) экземпляра. Здесь еще важно понять, что
обычно компилятор проверяет Тип
переменной, в которую записывается ссылка на экземпляр, а не Тип самого экземпляра. Компилятор оперирует Типом переменной, когда Вы ставите точку и видите список свойств и методов, доступных у данного Типа. Если Вы создадите переменную с Типом :Человек и запишите в нее ссылку на экземпляр подкласса Zack, Вы не сможете вызывать свойства и методы Zack, обращаясь к экземпляру через эту переменную. Но кастинг проверяет
не переменную, а экземпляр, и может определить, что ссылка ведет на экземпляр именно Zack, и позволит Вам либо записать эту ссылку в новую переменную с Типом Zack, либо просто воспользоваться результатом кастинга

Код AS3:
var man:Man = new Zack();
man.viewXRay(); // -> ERROR
(man as Zack).viewXRay(); // -> OK
var zack:Zack = man as Zack;
zack.viewXRay(); // -> OK
Приведение типов это совсем другое. Это преобразование одного типа в другой, даже если нет общей цепочки наследования — например строки в XML, массива в Vector, или числа в строку. Неявное приведение происходит всюду в вашем коде автоматически, когда Вы складываете строки и числа например, или пишете if(stage) {...}. В скобках после if должен быть Тип Boolean (true или false), а stage это совсем не Boolean, это визуальный класс Stage. И происходит автоматическое вычисление Boolean по принципу "null преобразуется в false, иначе true".
Формальное приведение осуществляется вызовом глобальной функции класса без оператора new, например

Код AS3:
var xml:XML = XML(string);
var s:String = String(568);
Кастинг является "безопасной" операцией, так как не генерит исключение (Error) в случае неудачи. Если экземпляр не проходит кастинг, то кастинг "молча" возвращает null.
Приведение же в случае неудачи сгенерирует ошибку. Очень мало типов на самом деле могут быть преобразованы друг в друга. Мало того, результат такого преобразования не всегда очевиден и предсказуем))