Flash Ripper RSS Readers


+

Архивы сайта Флэш Потрошитель за Октябрь 2003


30.Октябрь.2003, Strategy

Flash + Linux: свершилось!

Flash и Dreamweaver теперь можно использовать на платформе Linux. Это стало возможным благодаря выпуску новой версии CrossOver Office (позволяет выполнять Windows-приложения под Linux без необходимости приобретения Windows-лицензии).

Подробнее о Flash и Dreamweaver на платформе Linux(англ.).

Писал Rost, 11:42 AM Отзывов: 0

 

29.Октябрь.2003, Tools

Flashcast 1.3.3

Flashcast — это инструмент для "захвата" действий пользователя с экрана монитора, с возможностью компиляции полученных данных (включая перемещение мыши и клики) в готовый swf-файл. Инструмент подходит для производства туториалов, презентаций и т.п. Есть также возможность преобразования Powerpoint-презентаций в swf-формат. Производители Flashcast обещают также небольшой размер готового swf-файла. Недавно вышла новая версия этого приложения, 1.3.3. Подробнее о Flashcast 1.3.3.

Писал Rost, 11:18 AM Отзывов: 1

 

24.Октябрь.2003, Components

Компонент для защиты вашей работы: Developer's SWF Guardian

Developer's SWF Guardian (DSG 1.0.0) — это компонент для защиты и лицензирования swf-файлов. Он позволяет устанавливать защиту на ваши файлы при передаче их вашим клиентам. Вам, как разработчику, предоставляется возможность создать различные уровни доступа (с возможными ограничениями по времени использования, в зависимости от того, какой выданной вами лицензией (ключом) располагает конечный пользователь или клиент).

Типичный пример: При первой передаче ваших swf-файлов клиенту вы создаете "демо-ключ", со сроком действия в 45 дней. Как только клиент заплатил вам, вы можете выдать ему ключ (лицензию) полного доступа с бесконечным сроком действия. А если же клиент захочет вас обмануть и не выплачивать деньги (так делать нехорошо), срок действия его демо-ключа истечет и — ваш защищенный флэш-клип будет выдавать сообщение об ошибке, работать в ограниченном режиме или вообще перестанет функционировать.

Пора приступать к испытаниям!

Писал Rost, 11:35 AM Отзывов: 2

 

22.Октябрь.2003, Tools

www.flashextensibility.com — расширения для Flash MX 2004

Сайт www.flashextensibility.com содержит массу полезных расширений для
Flash MX 2004. Сайт поддерживается авторами книги "Extending Flash MX 2004" Keith Peters и Todd Yard (эта книга сейчас находится в процессе написания, а ее выход запланирован на середину ноября).

Еще одна ссылка: все расширения с www.flashextensibility.com и многие другие в одном флаконе. // via constantiner (спасибо :)

Писал Rost, 11:43 AM Отзывов: 2

 

21.Октябрь.2003, Good Job!

www.podlob.com

На авторском сайте www.podlob.com выложена масса экспериментов, как во Flash, так и в смежных областях. Хорошо сделано! // via Мой менеджер, спасибо ему!

Писал Rost, 12:59 PM Отзывов: 5

 

16.Октябрь.2003, Development

Macromedia Central SDK

http://www.macromedia.com/devnet/central/sdk/ // via den

Писал Rost, 11:59 AM Отзывов: 0

 

14.Октябрь.2003, Coding

Try, catch, finally

Речь идет о новых ключевых словах try, catch и finally, появившихся в языке ActionScript 2.0. Применение try и catch довольно очевидно; вы "пытаетесь" (try) выполнить часть кода, и если в процессе его выполнения возникнут ошибки, вы можете "поймать" (catch) их соответствующим блоком catch, (в противном случае код продолжает нормально выполняться дальше). Не столь очевидно применение finally:

function myFunction () : Boolean {
try {
doSomething();
} catch (e:MyError) {
doSomethingSafe();
} finally {
return true;
}
}

Если бы выражение return true в этом примере находилось вне блока finally, и если бы возникли ошибки, и некторые из них не были бы "пойманы", то функция не вернула бы никакого результата. Код из блока finally выполняется всегда, даже если есть не пойманные ошибки. Простое размещение кода после блока catch в таком случае не сработает, потому что произойдет немедленный выход из функции. Используйте finally, если необходимо выполнить некий код даже в случае возникновения ошибки. // via Peter Hall

Писал Rost, 11:34 AM Отзывов: 2

 

09.Октябрь.2003, Development

Решение для работы Flash в обновленном Internet Explorer

Вы наверняка уже слышали о новой политике работы а Активным Контентом (имеются в виду ActiveX-объекты веб-страниц) в броузере Internet Explorer. Новая политика имеет некоторые нюансы, содержащие потенциальную угрозу для нормального отображения Flash (ведь он является ActiveX-объектом). Сразу заметим, что Microsoft не виновата. Просто суд решил, что патенты Microsoft (ответчика) на использование ActiveX-технологии не столь убедительны, как патенты (не будем здесь рекламировать подлеца) истца. Последовали оргвыводы, и поэтому Microsoft в скором времени (начало 2004 года) выпустит создающее проблему обновление для Internet Explorer. Суть проблемы в том, что теперь перед загрузкой любого ActiveX-объекта (и Flash тоже) страницы броузер IE (и только он) будет спрашивать пользователя, можно ли загружать такой объект. Неприятный, но поправимый момент.

Нужно просто встраивать Flash в страницы таким образом, чтобы в html-коде он формально не выгдялел как ActiveX-объект. То есть отказаться от тэгов <object>, <embed>, и <applet>. А вместо этих тэгов использовать параметризованные вызовы функций из внешнего JavaScript-файла — чтобы таким образом вставлять ссылки на нужные ActiveX-объекты.

Есть и другой метод решения проблемы, позволяющий обойтись без внешнего скрипта. При этом в html-страницу включаются данные в формате base64 (бинарные данные), и для их правильного воспроизведения требуется обновленная версия Flash Player 7 (что-то здесь знакомо, не так ли?). Но большой минус этого метода в том, что контент должен сначала полностью загрузиться в страницу. Прелоадеры могут сильно пострадать! Хотя ведь можно сначала грузить легкий прелоадер, а потом уже через него — остальной контент. Простор для экспериментов.

Это один из немногих случаев, когда общественность была "за Microsoft".

Macromedia вместе с Microsoft разрабатывает технологии обхода "проблемы обновленного IE". В связи с этим на сайте Macromedia появились полезные материалы. Перечислим их:

  1. FAQ по данному вопросу. Носит обобщающий и жизнеутверждающий характер. В этом документе Macromedia сообщает, какие именно ActiveX-технологии подвергаются опасности: это Macromedia Flash, Authorware, и Shockwave, Sun Java, Apple QuickTime, Real Networks Real, Adobe Acrobat;
  2. Перечень инструментальных средств, производящих обновления существующих сайтов, и тем самым избавляющих пользователей от утомительных диалогов с тупыми вопросами, действительно ли можно загружать "активный" контент. Данный документ носит успокоительный характер. Сами инструменты еще не выпущены, и автор статьи прямо заявляет, что их окончательные версии по характеристикам могут слегка отличаться от описанных в статье. А выпуск планируетсся на начало 2004 года. И то, если Microsoft не удастся отсудить патент назад. Просто буря в стакане;
  3. Третья статья вскрывает технические подробности вопроса. Пригодится аудитории сайта Ф. Потрошителя. Ведь бывают случаи, когда автоматика не справляется с задачей полностью и нужно действовать руками.

Поговорим об этом подробнее

Инструментальные средства делятся на три группы

  1. Инструменты командной строки. Это Perl-(подобные) скрипты, в автоматическом режиме выискивающие и "починяющие" статические веб-страницы. Идеально для администраторов и продвинутых пользователей. Планируется также C-версия (с повышенным быстродействием).
  2. Инструменты с графическим интерфейсом. Делают точно то же самое, что и представители первой группы. Отличие заключается только в наличии удобных графических интерфейсов — так мама-Macromedia позаботилась о пользователях, для которых администрирование сайта не является привычной каждодневной процедурой. Версия для Mac OS 9 также присутствует. Молодцы ребята..
  3. Серверные инструменты. Работают как плагины для веб-сервера. Сканируют проходящие через сервер документы на предмет наличия в них "активного контента", пишут результаты поиска в логи сервера, — таким образом, позволяя находить и впоследствии исправлять динамически генерируемые документы с ActiveX-объектами (Flash!). Поддерживаемые сервера: Apache 2.0 и IIS 5. В будущем — Apache 1.3 и IIS 6.

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

Инструменты поставляется с исходным кодом, где это нужно.

Как исправить проблему руками

Вот простой пример кода, который в новом IE перестанет работать как раньше:

<object classid="clsid:D27CDB6E..."...>
<param name="movie" value="foo.swf">
</object>

Чтобы все снова заработало в новой версии IE, замените этот код вызовом скрипта из внешнего файла. Стоит поинтересоваться также разделом на сайте MSDN msdn.microsoft.com/ieupdate/. Там можно скачать тестовые примеры, работающие в подавляющем большинстве случаев.

Вариант решения 1. Внешний JavaScript для случая с небольшим количеством встроенных в страницу Flash-клипов

Если в странице присутствует один клип (или несколько, но не много), можно использовать следующее простое решение. Создайте для каждой страницы внешний JavaScript файл (JS), содержащий соостветствующий flash-контент. Если клипов в странице более одного, нужно внутри этого файла создавать уникальные функции для каждого клипа.

По шагам:

1. Создайте и сохраните JS-файл ос скриптом. В этом примере файл будем называть foo.js. Скрипт из этого файла при помощи функции document.write воссоздает в исходном HTML-файле насильственно устраненную оттуда конструкцию object/embed:

function RunFoo()
{
document.write('<object classid="clsid:D27CDB6E..." ...>\n');
document.write('<param name="movie" value="foo.swf" />\n');
document.write('</object>\n');
}

2. Теперь подключите этот JavaScript к HTML-странице:

<script src="[path]/foo.js" language="JavaScript" type="text/javascript"></script>

3. Замените все тэги <object> , <embed> , или <applet> вызовом соответствующего внешнего файла:

<script language="JavaScript" type="text/javascript">RunFoo();</script>

Вариант 2. Когда клипов в странице много

Немного сложнее, чем первый вариант, зато гибче. Внешний файл со скриптом содержит функции, вызывая которые вы можете включать в HTML-документ нужные вам ActiveX-объекты. При этом вы можете передавать функциям параметры, что и делает решение более гибким. Macromedia создала такие JS-Файлы для случая с включением в html-страницу Flash и Shockwave.

По шагам:

1. Сохраните эти JS-файлы в подходящей директории. В данном примере файлы называются AC_RunActiveContent.js и AC_Flash.js. Качать здесь(4Кб);

2. Подключите эти файлы ко всем страницам, содержащим ActiveX-контент. То есть Flash.

<script src="[path]/AC_RunActiveContent.js" language="JavaScript" type="text/javascript"></script>
<script src="[path]/AC_Flash.js" language="JavaScript" type="text/javascript"></script>

3. Замените все тэги <object> и <embed> соотвествующими вызовами функций (при этом передавая в функции параметры). Вот пример четырех вызовов: два для Flash и два для Shockwave:

AC_RunFlContent(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);

AC_RunFlContentX(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);

AC_RunSWContent(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);

AC_RunSWContentX(
"att1Name","att1Value",
"att2Name","att2Value",
...
"attnName","attnValue"
);

Пары типа "att1Name","att1Value" соответствуют исходным параметрам типа movie, id, bgcolor и т.п.

Например, вот так передается имя клипа:

"movie", "foo"

(внешний JavaScript-код сам добавит расширение файла)

Если же вы передавали параметры в сам Flash-файл, что могло выглядеть как

foo.swf?username=Bob&color=red

То чтобы продолжать передаваь эти атрибуты, включите их как аргументы функции:

"foo?username=Bob&color=red"

Файлы AC_RunActiveContent.js и AC_Flash.js производят проверки пар имя/значение на завершенность. Также автоматически добавляются атрибуты типа classid, codebase, mimeType и pluginspage. Если вы хоитие обновить значение одного из этих необходимых, нужно редактировать значение во внешнем JavaScript-файле AC_Flash.js. А в самой HTML-странице передавайте в качестве параметров только дополнительные аргументы.

Вот развернутый пример применения вышеописанной техники:

Оригинальный код

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="foo" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="foo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Заменяется на:

<script language="JavaScript" type="text/javascript" >
AC_RunFlContentX ("allowScriptAccess", "sameDomain", "movie", "foo", "quality", "high", "bgcolor", "#ffffff", "src", "foo", "width", "550", "height", "400", "name", "foo", "align", "middle", "id", "foo" );
</script>

Если у пользователя отключен JavaScript

Да, тогдав все это не сработает. Но заметьте, что обычно такие пользователи отключают и ActiveX-объекты тоже. Так что они ничего не потеряют при обновлении броузера. Их опыт не изменится.

Дополнение от MSA (спасибо!): "Тут ты забыл упомянуть про чудесный html-тег - <noscript></noscript> В который можно вставить код в старом виде (<object>, <embed> и <applet>. ). И хотя пользователь получит идиотское сообщение, но это лучше чем ничего. Тем самым мы перестраховываемся по любому."

Вывод

Паника была "несколько преждевременной". Перечисленные инcтрументы и/или ваши руки позволяют подготовиться к переходу на обновленную версию IE заранее. То есть никто из ваших пользователей не увидит те самые диалоговые окна с глупейшими вопросами типа "Можно ли включить Флэш?". Главное — вовремя проапгрейдить сайт, а на это есть достаточно времени. Конец Флэша снова отменяется :)

Писал Rost, 02:57 AM Отзывов: 8

 

07.Октябрь.2003, Tools

SWF2Video для Premiere Pro

Студия FlashAnts выпустила новую версию своего плагина SWF2Video с полной поддержкой мувиклипов и ActionScript.

При помощи плагина можно производить прямой импорт из SWF-файлов в Adobe Premiere, зная, что ваши скрипты и мувиклипы пройдут через процедуру импорта без потерь. При этом также поддерживается альфа-канал, что позволяет накладывать swf-клипы поверх других видеоклипов.
Плагин поддерживает версии Flash 4, Flash 5 и Flash MX. А поскольку большая часть контента Flash MX 2004 может быть экспортирована во Flash 6, плагин можно использовать и для ваших последних работ. Цена плагина — $149 (для двоих пользователей).

Читать подробности от разработчика (FlashAnts).

Писал Rost, 11:13 AM Отзывов: 1

 

03.Октябрь.2003, Coding

ActionScript 2.0 для пользователей ActionScript 1.0: Часть третья. Наследование и интерфейсы

Автор: Joey Lott [http://www.person13.com/]

В первых двух частях [часть 1 | часть 2] мы рассматривали структуру и синтаксис классов в ActionScript 2.0. Мы узнали, как создавать классы в ActionScript 2.0, включая использование пакетов, членов класса с разными режимами доступа (public/private/static), а также геттеров и сеттеров. Теперь поговорим о наследовании (inheritance) и интерфейсах (interfaces).

О наследовании

Наследование связано с иерархичностью классов. Можно определить подкласс и суперкласс. Подкласс автоматически наследует всех членов суперкласса без необходимости их явного повторного определения. Это важное и полезное свойство классов, поскольку позволяет использовать высокий уровень абстракции. А высокий уровень абстракции ведет к высокой эффективности рабочего процесса, и чем сложнее проект, тем это заметнее.

Например, вы хотите создать класс Car, подобный тому, что мы создавали в предыдущих частях статьи. Ясно, что Автомобиль — это один из многих типов Машины, помимо Автомобилей существуют Вертолеты, Дрезины, Джипы, Терминаторы и т.д. Хотя Машины и отличаются друг от друга, у них есть много общего. Все вышеперечисленные машины могут иметь такие свойства, как "грузоподъемность" или "пробег" (для Самолетов — "пролет"). А если Машина еще и передвигается в пространстве, у нее есть методы для перемещения с заданной скоростью.

Так вот, если вы создадите суперкласс Vehicle (т. е. "Машина"), то можно в него поместить все общие для машин характеристики (свойства и методы). При этом код будет написан только в одном месте, а использовать его можно будет во многих местах: во всех подклассах класса Машины. Для создания суперкласса не нужно быть чемпионом по программированию среди домохозяек (или домохозяинов). Просто берете и создаете суперкласс, как раньше создавали обычные классы. А вот чтобы наследовать от этого класса (иными словами, расширить его), потребуются новая техника. Довольно легкая в освоении.

Расширение суперкласса

В терминах ООП можно сказать, что подкласс расширяет (extends) суперкласс. В нашем примере подкласс Car расширяет суперкласс Vehicle. Чтобы Flash создал такую связь между ними, нужно при объявлении подкласса использовать ключевое слово extends:

class Subclass extends Superclass {
}

В случае с Автомобилем и Машиной получится приблизительно следующее:

class Car extends Vehicle {
}

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

Вызов перекрытых методов суперкласса

Часто возникает ситуация, когда в подклассе необходимо унаследовать метод суперкласса без каких-либо изменений в этом методе. В таких случаях в определением подкласса просто не нужно ничего делать с этими методами. Но во многих других случаях метод суперкласса может быть перекрыт — для реализации в данном методе особенностей подкласса. Это называется перекрытием (overriding) метода суперкласса, поскольку при этом подкласс определяет в себе собственную реализацию метода, которая перекрывает унаследованную, родительскую.

Перекрывать методы суперкласса можно по-разному:

  1. Вы можете перекрыть метод полностью, так что реализация метода в суперклассе будет полностью проигнорирована;
  2. Можно сделать так, чтобы по-прежнему вызывался метод суперкласса, а реализация метода в подклассе добавляла бы всю нужную дополнительную функциональность.

Чтобы полностью перекрыть родительский метод, просто определите в классе-потомке метод с точно таким же именем, как и у родительского метода. Например, если у суперкласса есть метод типа:

// Метод определен в суперклассе
public function display():Void {
trace("Это метод суперкласса");
}

Потом можно определить реализацию метода в подклассе, которая перекроет реализацию этого метода в суперклассе:

// Метод определен в подклассе
public function display():Void {
trace("Это метод подкласса");
}

Это был первый подход.

Если же вы хотите реализовать в подклассе метод, который будет вызывать также свою реализацию в суперклассе, можете использовать ключевое слово super, чтобы ссылаться на суперкласс и явно вызывать его метод из метода подкласса. Например, пример с методом display() в таком случае можно переписать следующим образом:

// Метод определен в подклассе, происходит вызов метода суперкласса
public function display():Void {
super.display();
trace("Это метод подкласса");
}

Затем, если из экземпляра подкласса вызвать метод display() подкласса, в панели Output увидим следующее:

Это метод суперкласса
Это метод подкласса

Ссылку super можно использовать в любом месте подкласса. Например, вызов super() будет ссылаться на метод конструктора суперкласса. Это пригодится, если вы хотите, чтобы конструктор подкласса выполнял некоторые действия, уникальные для подкласса, но в то же время вы хотите вызывать конструктор суперкласса, передавая ему некие конкретные значения. Единственное предостережение: конструктор суперкласса должен всегда вызываться в первой строке конструктора подкласса, если вы вызываете его явно. В противном случае получите ошибку компиляции.

Создание классов Машины и Автомобиля

Конец теории. Выполним упражнение. Создадим суперкласс Vehicle (Машина) и подкласс Car (Автомобиль). Если вы сделали упражнение из второй части данной статьи, то вам будет легко следить за мыслью.

  1. Создайте структуру директорий для пакета com.person13. Например, D:\Swf\Classes\com\person13;
  2. Откройте новый ActionScript-файл;
  3. Добавьте в него такой код:
    class com.person13.Vehicle {
    private var _nPassengers:Number;
    private var _nMiles:Number;
    private var _nInterval:Number;
    function Vehicle(nPassengers:Number, nMiles:Number) {
    _nPassengers = nPassengers;
    miles = nMiles;
    }
    public function get passengers():Number {
    return _nPassengers;
    }
    public function get miles():Number {
    return _nMiles;
    }
    public function set miles(nMiles:Number):Void { if(nMiles >= 0) {
    _nMiles = nMiles;
    }
    else {
    _nMiles = 0;
    }
    }
    public function move(nMPH:Number):Void {
    if(nMPH == null || nMPH <= 0) {
    clearInterval(_nInterval);
    }
    else {
    _nInterval = setInterval(this, "increment", 1000, nMPH);
    }
    }
    private function increment(nMPH:Number):Void {
    _nMiles += nMPH;
    }
    }
  4. Сохраните файл как Vehicle.as в директории com/person13;
  5. Откройте файл класса Car.as (мы создавали его во второй части) (по идее он должен был остаться в директории com/person13 ). В противном случае откройте новый ActionScript-файл;
  6. Добавьте в файл Car.as код (или напишите заново, если вы все же поленились сделать упражнение из второй части). Должно получиться так:
    // Класс Car расширяет класс Vehicle и наследует все его свойства и методы
    class com.person13.Car extends com.person13.Vehicle{
    // Объявляем только свойства, специфические для класса Car.
    // Остальные свойства наследуются, так что не надо объявлять их заново.
    private var _sMake:String;
    private var _sModel:String;
    private var _nYear:Number;
    function Car(sMake:String, sModel:String, nYear:Number, nPassengers:Number, nMiles:Number) {
    // Вызываем конструктор суперкласса, затем присваиваем значения
    // свойств, специфических для класса Car.
    super(nPassengers, nMiles);
    _sMake = sMake;
    _sModel = sModel;
    year = nYear;
    }
    public function get make():String {
    return _sMake;
    }
    public function get model():String {
    return _sModel;
    }
    public function get year():Number {
    return _nYear;
    }
    public function set year(nYear:Number):Void {
    if(nYear >= 1886) {
    _nYear = nYear;
    }
    else {
    _nYear = 1886;
    }
    }
    // Определяем метод drive(), который на самом деле вызывает метод move(),
    // унаследованный из суперкласса Vehicle. Именно так делать не обязательно, но
    // лучше все же делать так, самому же потом разобраться легче будет,
    // поскольку термин "drive" больше подходит для машины, чем "move".
    // Таким образом, API для класса Car будет интуитивно понятнее.
    public function drive(nMPH:Number):Void {
    move(nMPH);
    }
    }
  7. Сохраните файл Car.as в директории com/person13, где перед этим сохраняли Vehicle.as;
  8. Возьмите .fla-файл, созданный ранее во второй части. Или создайте новый .fla-файл;
  9. Как бы там ни было, в первом кадре этого .fla-файла должен оказаться такой код:
    import com.person13.*;
    function displayMileage(carObj:Car):Void {
    trace(carObj.miles);
    }
    var car:Car = new Car("Oldsmobile", "Alero", 2000, 5, 43000);
    car.drive(65);
    setInterval(displayMileage, 100, car);
  10. Теперь можно делать Test Movie. В панели Output вы увидите пробег автомобиля в милях. Число будет увеличиваться раз в секунду, потому что автомобиль едет.

    [Необязательная часть для любителей воздушных аппаратов]

  11. Откройте новый ActionScript-файл;
  12. Добавьте в него такой код:
  13. class com.person13.Plane extends com.person13.Vehicle{
    private var _sMake:String;
    private var _sModel:String;
    function Plane(sMake:String, sModel:String, nPassengers:Number, nMiles:Number) {
    super(nPassengers, nMiles);
    _sMake = sMake;
    _sModel = sModel;
    }
    public function get make():String {
    return _sMake;
    }
    public function get model():String {
    return _sModel;
    } public function fly(nMPH:Number):Void {
    move(nMPH);
    }
    }
  14. Сохраните файл как Plane.as в директории in the com/person13;
  15. Создайте новый .fla-файл;
  16. Добавьте такой код в первый кадр:
    import com.person13.*;
    function displayMileage(obj:Plane):Void {
    trace(obj.miles);
    }
    var plane:Plane = new Plane("Boeing", "747", 300, 100000);
    plane.fly(400);
    setInterval(displayMileage, 100, plane);
  17. Теперь — TestMovie.

Расширение подклассов

Вы не ограничены одним уровнем наследования. Подкласс тоже можно расширять. Также как и подкласс подкласса-подкласса-подкласса -подкласса. Например, можно создать класс Niva, который будет расширять класс Car, или создать класс Kukuruzniq, расширяющий класс Plane. Процесс создания таких подклассов аналогичен описанной выше последоватьельности действий и не зависит от наличия суперкласса у расширяемого подкласса.

Об интерфейсах

Интерфейсы — это просто. Это набор правил, в соответствии с которыми реализуется некий набор классов. Когда вы определяете класс, который следует правилам интерфейса, то говорят, что класс реализует (иногда на жаргоне говорят — "имплементит", от англ. "implements") интерфейс.

Какие правила определяются в интерфейсе? Интерфейс в ActionScript 2.0 сообщает Flash, какие методы должны реализоваться в классе, включая следующую информацию:

  • Имя метода;
  • Входные параметры;
  • Публичное объявление метода (объявления методов с режимом доступа private или static в интерфейсе недопустимы);
  • Тип возвращаемого значения.

В интерфейсе недопустимы:

  • Объявления свойств;
  • Реализации методов;
  • Объявления методов с режимами доступа private или static.

Затем можно реализовывать интерфейс в классе. При этом, кроме всего прочего, в классе должны реализовываться методы, объявленные в интерфейсе. В противном случае на этапе компиляции Flash выдаст сообщение об ошибке.

Преимущества интерфейсов

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

Реальное величие интерфейсов видится с некоторого расстояния. если вы создаете один класс для одного приложения, то интерфейсы вам и не нужны. И не все классы обязаны реализовать интерфейс. Но если вы работаете в команде, а проект не маленький — тут интерфейсы приходят на выручку, помогая создавать основные вехи проекта, что повышает эффективность процесса не только на этапе разработки иерархии классов приложения, но также и на этапе применения этих классов.

Например, вы работаете в команде, которая создает классы Vehicle (Машина), Animal (Животное), Wind (Ветер) и Planet (Планета). В то время как у каждого из этих классов может быть собственный API, между ними есть и общее — все они способны двигаться. Если вы хотите реализовать движение в каждом из этих классов, можно создать интерфейс IMoveable, который будет реализовываться всеми этими классами. Интерфейс IMoveable будет содержать объявление метода move(), так что теперь каждый конкретный человек, работающий над реализацией конкретного класса, будет учитывать этот факт в процессе разработки и реализует метод move() в разрабатываемом им классе. Это большой плюс при командной работе. Когда вы создаете интерфейс и определяете, какие классы будут его реализовать, то потом все разработчики, работающие над классом, будут заранее знать, какие методы писать, и это облегчает стандартизацию API всех классов. Еще одно преимущество получает разработчик, использующий такой класс. Зная, какой именно конкретный интерфейс реализуется в классе, вы ужен знаете много о своем API.

Один класс может реализовывать многочисленные интерфейсы. Поэтому интерфейсы часто используются как форма множественного наследования в языках, изначально не поддерживающих такой вид наследования. В ActionScript подкласс может наследовать только от одного суперкласса. Например, класс Car расширяет класс Vehicle, и следовательно не может расширять ни один другой класс. Но Car может реализовывать множественные интерфейсы (продолжая при этом наследовать от класса Vehicle.) Например, Car может реализовать интерфейсы типа IDrivable (автомобиль можно водить), IManufacturable (можно производить), ISellable (можно продать).

Создание интерфейса

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

Декларация (объявление) интерфейса выглядят почти идентично декларации класса. Единственное различие в том, что при объявлении интерфейса используется ключевое слово interface, вместо ключевого слова class. Например:

interface IMoveable {
// Определение интерфейса
}

В интерфейсе можно только объявлять методы, но не реализовывать их. Реализовываться методы будут в классах, реализующих интерфейс. В интерфейсе нельзя также объявлять свойства. Еще раз кратко перечислим то, что может и должно содержаться в интерфейсе:

  • Имя метода;
  • Имя и тип ожидаемого параметра;
  • Объявление публичных методов;
  • Тип возвращаемого значения.

Вот пример готового интерфейса IMoveable:

interface IMoveable {
public function move(nMPH:Number):Void;
}

Как и классы, интерфейсы удобно хранить в пакетах. Например, можно упаковать IMoveable в пакет com.person13. В декларации интерфейса это выглядит вот так:

interface com.person13.IMoveable {
public function move(nMPH:Number):Void;
}

И также, как и классы, интерфейсы могут расширять друг друга Например, IDrivable может расширять IMoveable, вот как будет при этом выглядеть код:

import com.person13.IMoveable
interface com.person13.IDrivable extends IMoveable {
public function drive(nMPH:Number):Void;
}

Реализация интерфейса

После определения интерфейса можно указать, что некий класс реализует этот интерфейс. Для этого используется ключевое слово implements, за которым будет следовать список разделенных запятыми реализуемых интерфейсов. Например, если класс Vehicle реализует интерфейс IMoveable, то начало объявления класса будет выглядеть так:

class com.person13.Vehicle implements com.person13.IMoveable {

Конечно, при этом можно пользоваться импортом (как и с классами):

import com.person13.IMoveable;
class com.person13.Vehicle implements IMoveable {

А вот класс Car реализует интерфейсы IDrivable, IManufacturable, и ISellable:

import com.person13.*;
class com.person13.Car implements IDrivable, IManufacturable, ISellable {

Когда класс реализует интерфейс, Flash будет проверять правильность этой реализации во время компиляции. И если какой-то метод пропущен или объявлен неверно, не так, как в интерфейсе, то Flash выдаст сообщение об ошибке.

(От переводчика: таким образом, легко понять мощь компиляции. Интерфейсы являются таковыми прежде всего для классов, прокладывая между "городами" разных классов "дороги" объявленных в интерфейсе методов. Как будто разные классы (читайте — разработчики разных классов) подписали виртуальный договор о сотрудничестве. После подписания такого договора каждый класс-участник договора обязан реализовать все объявленные в договоре-интерфейсе методы. А поскольку "за исполнением условий договора" следит сама среда разработки Flash, на этапе компиляции указывающая на любые отклонения от договора, то можно не сомневаться в соблюдении условий. Гениальное изобретение!)

Вывод

Вот и разобрались. Комментарии приветствуются как никогда. Спасибо :]

Примечания:

1) Часто вместо "перекрытие" говорят "переопределение". Пусть это вас не смущает!

2) Не забывайте, что иногда вместо "реализовать" говорят "имплементить".

Писал Rost, 03:06 AM Отзывов: 13

 

01.Октябрь.2003, Tools

FlashSlider v1.3 — инструмент для создания слайд-шоу

Программа FlashSlider обновлена до версии 1.3. Ее назначение — быстрое и ненавязчивое создание слайд-шоу с разнообразными переходными эффектами между слайдами. Подробности мы писали раньше: FlashSlider — инструмент для создания слайд-шоу.

С тех пор в программе произошли улучшения:

  • В готовые клипы можно добавлять кнопки навигации;

  • По завершении клипов возможны три вида действий;

  • Добавлен Менеджер Эффектов, облегчающий формирование набора эффектов.

Писал Rost, 08:06 PM Отзывов: 3

 

Примечания: Статус документа: в процессе
++


Этот сайт окупается за счет саперов. Они говорят:
+++




++++



© 2002-2008 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)