ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Join the forum, it's quick and easy

ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!
ИГРОДЕЛ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

ActionScript 3.0. Урок 10. типы данных

Перейти вниз

ActionScript 3.0. Урок 10. типы данных Empty ActionScript 3.0. Урок 10. типы данных

Сообщение автор Admin Вс Фев 21, 2010 4:08 am

Начиная с ActionScript 2, ActionScript поддерживал строгий тип данных. Это позволяет разработчикам определить, какие типы данных будут иметь разные переменные. Например, если вы пытаетесь использовать переменную с типом String в методе, который ожидает аргумент типа Number, флеш выдаст ошибку.

var str:String = "string";
function doubleNumber(num:Number):Number {
return num*2;
}
doubleNumber(str); // Error: Type mismatch


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

Примечание: Когда тип сохраняется для ActionScript 2
Единственное исключение в ActionScript 2, где информация о типах остается для операций при прогоне, связано с выражениями try..catch..finally.

С другой стороны, ActionScript 3 поддерживает не только проверку типа при компиляции, но также проверку типа при прогоне. Если в ActionScript 3 во время прогона обнаруживается конфликт типов, будет выдана ошибка при выполнении. В общем, это хорошая штука. Но также иногда может потребоваться принудительное изменение типа переменной для предотвращения необоснованных ошибок.

Что касается ActionScript 3, то здесь существует гораздо больше видов объектов или классов. Взять, к примеру, класс MovieClip, который сейчас наследует от Sprite, DisplayObjectContainer, InteractiveObject, DisplayObject, EventDispatcher и Object. В ActionScript 2, MovieClip наследовал только от класса Object. Это означает, что сейчас MovieClip может использоваться как значение для любой переменной с любым из этих типов, так как в дополнение к тому, что MovieClip является экземпляром, экземпляры MovieClip также являются экземплярами этого типа (так как они – унаследованные типы).

var container:DisplayObject = new MovieClip(); // OK

Хорошим примером этого является свойство parent класса DisplayObject. Оно имеет тип DisplayObjectContainer, но экземпляр MovieClip может с легкостью быть родителем другого экземпляра, потому что он тоже является DisplayObjectContainer через механизм наследования. Получив тип DisplayObjectContainer, а не MovieClip, он также позволяет другим контейнерам, таким как Sprite или Loader, быть допустимыми значениями.


Но здесь и кроется проблема. Несмотря на то, что привязка значений переменным, имеющим унаследованный тип, проходит хорошо, и даже необходима во многих случаях, это также означает, что флеш не имеет полного представления о типе этой переменой. Для всех событий и целей флеш может только предполагать, что любое значение имеет свойства и методы, которые специфичны для определения, предоставленного его типом. Родителем некоторого объекта отображения может быть MovieClip, но если вы попытаетесь использовать метод gotoAndPlay() в свойстве parent этого объекта, флеш-плеер выдаст ошибку, потому что gotoAndPlay() не является методом класса DisplayObjectContainer – типа, ассоциированного со свойством parent.

parent.gotoAndPlay(5); // Error: Call to a possibly undefined method

Чтобы распространить это, вам потребуется преобразовать свойство parent в корректный тип, в данном случае MovieClip.

// Cast to MovieClip
MovieClip(parent).gotoAndPlay(5);
Admin
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

https://game-dll.forum2x2.ru

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения