Flash Ripper RSS Readers


+

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


30.Сентябрь.2003, Tools

Сlass Browser для MX 2004

Вальянов Дмитрий пишет:
>>Рост, а вот такие тулзы тебе попадались уже:
>>SEPY editor
>>http://www.sephiroth.it/phpwiki/index.php/SEPY
>>ClassBrowser
>>http://www.sephiroth.it/phpwiki/index.php/ClassBrowser
>>
>>Что скажешь?

Нет, знаешь, не встречал как-то раньше )

Class Browser выглядит как очень полезная штука, спасибо!

А редактор.. так сразу не скажешь, надо поработать в нем —
а вообще выглядит неплохо.

——
Рост

Class Browser может очень и очень пригодиться вам, если вы хотите разобраться в иерархии классов Flash MX 2004 (или в структуре своих классов, когда напишете их уже немало). Редактор ActionScript-кода SE|PI еще, конечно, сыроват, но тоже не останется без поклонников.

(А еще — спасибо доброму человеку за ссылки :)

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

 

29.Сентябрь.2003, Strategy

Переезд файлов Ф. Потрошителя на новый сервер

Сайт Ф. Потрошителя перехал на новый сервер. Адрес остался прежним, регистрация доменного имени продлена (спасибо, Mike!), (кстати, 25 сентября 2003 нам исполнился год :).

Было: Сайт Ф. Потрошителя переезжает на новый сервер. В связи с этим в ближайшие пару дней возможны временные перебои в работе сайта, в частности, в системе добавления записей и комментариев.

Зато новый сервер самый лучший! :-]

И спасибо всем, кто с нами :)

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

 

25.Сентябрь.2003, JSFL

Голый JSFL

Язык JSFL, появившийся во Flash MX 2004, предоставляет много возможностей для автоматизации рабочего процесса. Сейчас мы рассмотрим простейший пример использования этих возможностей. Мы создадим один текстовый jsfl-файл, выполнив который, получим в результате три готовых к публикации файла (fla, swf и html).

1. Создайте директорию "\D:\Swf\Projects". (Flash MX 2004 Professional может многое, как мы еще убедимся, но не может создавать директории на вашем жестком диске, а нам эта директория понадобится — мы будем сохранять в ней исходный fla-файл и публиковать его будем тоже в ней);

2. Создайте файл "D:\Swf\Jsfl\Experiments\createDocument-1.jsfl" с таким кодом внутри:

var doc = fl.createDocument(); 							// создаем документ
var firstFrame = doc.getTimeline(0).layers[0].frames[0];				// это ссылка на первый кадр документа
firstFrame.actionScript="trace('hello world');";					// пишем код в первом кадре
firstFrame.actionScript += "\ntrace('Это приложение было создано с помощью языка JSFL');";	// пишем еще код
fl.saveDocument(doc, "file:///D:/Swf/Projects/createdByJsfl-1.fla");  			// сохраняем документ
doc.publish();								// публикуем документ
fl.closeDocument(doc);							// закрываем документ!

3. Теперь сохраните и выполните этот файл (двойной клик или Enter по нему);

В результате, если вы все делали как описано выше, то получите три файла:

D:/Swf/Projects/createdByJsfl-1.swf
D:/Swf/Projects/createdByJsfl-1.html
D:/Swf/Projects/createdByJsfl-1.fla

Flash MX 2004 автоматически запустилась, выполнила и выполнила jsfl-файл (вы можете добавить еще и команду fl.quit(); если хотите, чтобы Flash еще и автоматически закрылась).

Зачем это все нужно, спросите вы? О возможных применениях будет полезно поразмыcлить самостоятельно. Простейшее, что сразу приходит в голову — создавать однотипные файлы по шаблону, а не руками (мы же не роботы, правда?). Продолжение следует..

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

 

23.Сентябрь.2003, Coding

XMLNode.prototype.__resolve (Iv)

Статья "Введение в ActionScript 2.0 для пользователей ActionScript 1.0: Часть Третья" ("Наследование и интерфейсы") находится в процессе перевода и на днях будет выложена на сайте Ф. Потрошителя.

А пока предлагаем вам насладиться красотой. Вот цитата (по материалам конференции "ruFlash"):

"я это еще нигде не публиковал... только сегодня приснилось:

Народ постоянно парится по поводу перевода XML в массивы и прочая.
- Нифига это не нужно. Достаточно добавить две строчки кода и на тебе, обращайся к узлам XML как к элементам массива!!!

XMLNode.prototype.__resolve = function(d) {
if (typeof (Number(d)) == "number") return this.childNodes[d]
};
// TEST
my_xml = new XML("text");
trace(my_xml[0]);
trace(my_xml[0][0]);
trace(my_xml[0][0][0]);
trace(my_xml[0][0][1]);

- последняя версия находится здесь: http://proto.layer51.com/d.aspx?f=1075


Ivan Dembicki

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

 

19.Сентябрь.2003, Tools

ASV 4.0 c поддержкой Flash MX 2004 вышел

Action Script Viewer, самый мощный инструмент для работы с swf-файлами обновлен.

Новые возможности в ASV4:

  • ASV может обрабатывать SWF-файлы, созданные в Flash MX 2004 и Flash MX Professional 2004: SWF версии 7 и оптимизированные SWF версии 6. ASV поддерживает как AS1, так и AS2. Теперь с помощью ASV можно смотреть код как одной, так и другой версии; например, можно увидеть, как скрипт класса для AS2 превращается в аналогичный для AS1;
  • ASV может экспортировать ресурсы и JSFL-команды, и это помогает восстанавливать FLA-файлы из SWF-файлов;
  • ASV может экспортировать векторные символы как готовые инструменты для Flash MX 2004 (JSFL);
  • Классы можно сохранять как отдельные .AS-файлы в соответствующих структурах директорий;
  • Добавлена поддержка прилинкованого (извне) видео, звуков устройств (для мобильных устройств) и т.д.;
  • Исправлены многие старые глюки.

Ссылки:
Домашняя страница ASV.
Качать демо-версию ASV3 (версия ASV4 пока не выложена).
Заказать ASV4 онлайн ($59.95). Очень хочется верить, что кому-то пригодится эта последняя ссылка :-]

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

 

18.Сентябрь.2003, Tools

Flash Plugin Switcher

Полезно для разработчиков: этот инструмент поможет вам переключаться с одной версии Flash Player на другую. Flash Plugin Switcher

Писал Rost, 07:23 PM Отзывов: 1

 

17.Сентябрь.2003, Personalities

Открыт блог на Debreuil.com

Спина большой рыбы показалась на поверхности океана. На спине этой рыбы вы найдете информацию о __bytecode__ (из первоисточника) и не только.

Коснитесь монстра: www.debreuil.com/blog.

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

 

15.Сентябрь.2003, Coding

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

Как и обещали, в этой части поговорим о формальном синтаксисе классов в ActionScript 2.0 (сокращенно — AS2). Сразу заметим, что для правильного усвоения этой статьи вы должны быть уже знакомы с объектно-ориентированным программированием. Для этого можно почитать ООП от Робина Дебройла (на русском) или вот это на английском:

http://www.oreillynet.com/pub/a/javascript/2003/08/12/actionscriptckbk.html
http://www.oreillynet.com/pub/a/javascript/2003/08/19/actionscriptckbk.html

(Если вы можете отличить конструктор от метода, читать это необязательно).

Структура класса в ActionScript 2.0

Сравнивая структуру "класса" в AS1 и структуру класса в AS2, скорее можно запутаться, чем прояснить дело. Правда в том, что в AS2 структура класса фундаментально отличается от знакомой нам по AS1. Если вы создавали классы в Java или C#, или даже в VB или PHP, то можете кричать "ура". Если же весь ваш объектно-ориентированный опыт связан с ActionScript 1.0, тоже не особо расстраивайтесь. Конечно, в ActionScript 2.0 синтаксис отличается, но зато он намного более последователен. Недели создания классов в ActionScript 2.0 вам хватит, чтобы затем еще и удивиться, как в ActionScript 1.0 вообще можно было делать что-то подобное.

Начнем с освещения ключевых моментов нового синтаксиса и структуры, затем рассмотрим все это поближе.

  • Классы ActionScript 2.0 должны быть описаны в .as-файлах, в одном файле может быть описан только один класс;
  • Классы ActionScript 2.0 объявляются при помощи нового ключевого слова class, за которым следует имя класса, а за именем класса следует заключенное в фигурные скобки его тело (называемое определением класса). Например:

    class Car {
    // Описание класса..
    }
  • Классы ActionScript 2.0 могут содержаться в пакетах (packages). ActionScript 2.0 поддерживает ключевое слово import, чтобы импортировать целые пакеты с классами или отдельные классы из пакетов;
  • Члены классов ActionScript 2.0 могут быть объявлены как члены с разными режимами доступа: public, private, и static;
  • Классы ActionScript 2.0 могут расширять другие классы, для этого при объявлении класса используется ключевое слово extends;
  • Классы ActionScript 2.0 могут реализовывать интерфейсы (interfaces).

Если не все здесь вам знакомо, — не волнуйтесь, продолжайте читать. Далее по тексту все объясняется и приводятся примеры (желательно иметь под рукой Flash MX 2004 или Flash MX Professional 2004.) (Скачать триал).

Объявление классов в файлах классов

Если вы не работали с языками типа Java или C#, то хранение каждого класса в его собственном файле вам пока незнакомо. Особенно, если вы работали только с ActionScript 1.0, в котором могли определять многочисленные классы в пределах единственного файла. Пофайловое хранение классов имеет свои плюсы. Главный — лучшая организация, из которой следует удобство хранения и распространения. Если пихать классы куда попало, хаос наступит быстро. Ясно, что при работе с 2-3 классами такой проблемы нет. Но ActionScript 2.0 вводит новую парадигму для ActionScript. Разработчики могут создавать и распространять библиотеки классов, содержащие неборы базовых функций. Просто чтобы колесо не изобреталось по нескольку раз в день в разных точках мира, а чтобы образовывалиь все более сложные механизмы из экземпляров одного хорошо продуманного колеса. Macromedia подает пример: посмотрите стандартные классы в каталоге First Run/Classes (и его подкаталогах) в той директории, где у вас установлена Flash MX 2004.

Итак, в отличие от классов ActionScript 1.0, все классы ActionScript 2.0 должны быть сохранены во внешних .as-файлах. Более того, имя файла должно совпадать с именем класса. Например, класс Car должен храниться в файле Car.as.

Работа с пакетами

Файлы классов можно хранить в пакетах (packages). Если вы не знакомы с пакетами (в мире .NET их называют простраствами имен (namespaces) то знайте, что это очень просто и удобно. Пакеты — это способ организации классов. Здесь есть два аспекта. Во-первых, в определении класса нужно указывать его пакет (об том будет подробнее). Во-вторых, .as-файл должен быть сохранен в соответствующей директории. Например, если пакет для класса — com.person13, то .as-файл для этого класса должен быть сохранен в директории com/person13.

Работа с пакетами тоже имеет преимущества. Наиболее очевидное: пакеты есть способ быстрой организации ваших файлов класса. Примеры найдете в классах, поставляемых вместе с Flash MX 2004 (в каталоге First Run/Classes). Вы увидите, что многие классы для UI-компонентов организованы в пределах пакета mx.controls и, следовательно, сохранены в директории mx/controls. Второе преимущество пакетов: они помогают избегать конфликтов имен. Вы не можете иметь два класса с одним и тем же именем в одном и том же пакете хотя бы той по очевидной причине, что путь к файлу класса должен быть уникальным. Так что если бы пакетов не было, вы бы столкнулись с такой проблемой очень быстро. Конечно, если вы сами пишете все классы, то вы можете дать каждому классу уникальное имя. Но когда вы загружаете и устанавливаете классы других разработчиков, ситуация может выйти из под контроля. А вот когда классы хранятся в пакетах, все становится на стои места. Например, класс Car в пакете com.person13 и класс Car в пакете com.ejepo никогда не подвергнутся опасности конфликта имен.

Указание пути к классам (classpath)

По умолчанию Flash ищет файлы классов в директории First Run/Classes. Если не находит там, то ищет дальше в директории вашего исходного fla-файла или документа ActionScript. Classpath — это список директорий, в которых Flash ищет файлы класса. Вы можете указать дополнительные директории для classpath или изменить порядок поиска файлов классов по директориям. Выберите меню Edit>Preferences, затем жмите закладку "ActionScript". Потом жмите "ActionScript 2.0 Settings". В открывшемся диалоге используйте кнопку с плюсом, чтобы добавить директорию и т.д. (Надеюсь, дочитавшим до этого места не нужно разжевывать назначение давно знакомых элементов интерфейса — прим перев.)


Рис. 1: определение списка classpath

На рис. 1 все хорошо видно. Мы добавили свою директорию D:\Swf\Classes. На то есть причины:

  • Легче найти на диске директорию типа D:\Swf\Classes, чем родную директорию, где Flash хранит файлы класса;
  • Лучше хранить свои классы отдельно от тех, что поставляются вместе с Flash.

Что такое Private и Public

Класс состоит из членов — свойств и методов. Доступ к членам класса может происходить в разных режимах (публично или приватно). Если вы не использовали некоторые изощренные или недокументированные возможности ActionScript 1.0, то все члены классов ActionScript 1.0 были публичными (public). Когда мы говорим, что член является публичным, это означает, что он доступен извне определения класса. Например, если вы создаете класс Car, а у него — свойство make, доступное из экземпляра класса Car, тогда это свойство является публичным. Но часто вы не хотите, чтобы свойства и методы класса были публично доступны. Класс может иметь свойства и переменные, которые используются только непосредственно внутри него. В таких случаях, вы можете объявить, что член будет приватным (private).

Примечание: приватный член класса в ActionScript 2.0 ведется себя подобно защищенному (prtotected) члену в языках типа Java или C#.

Для того, чтобы объявить член класса как публичный или приватный, используйте ключевые слова public и private соответственно. Например, следующий код объявляет приватное свойство:

private var _nInterval:Number;

Согласно общепринятым соглашениям, можно начинать имя приватного свойства с символа подчеркивания, чтобы легче было отличать его "неприватных" переменных.

Мы рассмотрим объявление публичных и приватных членов далее в этом разделе. На примерах все станет намного понятнее (мы создадим собственный класс).

Примечание: Если не указан режим доступа (публичный или приватный), то считается, что член публичный.

Что такое статические члены класса

Статические члены класса доступны непосредственно из класса, а не из его экземпляров. Это не новое понятие из ActionScript 2.0. Фактически, начиная с Flash 5, появились встроенные классы со статическими членами. Например, класс Math полностью состоит из статических членов. Доступ к свойствам и методам производится непосредственно из класса, без создания экземпляра. Например:

trace(Math.cos(3.14));
Заметьте, что метод cos() доступен прямо из класса Math, так как это — статический метод. Чтобы создать статический член в классе ActionScript 2.0, используйте при объявлении ключевое слово static. Кстати, статические члены, как и не-статические, могут быть публичными или приватными. Вот пример объявления публичного статического члена:

public static var classname = "Car";

Объявление класса

Упрощенно, класс состоит из таких частей:

  • Объявление класса, состоящее из ключевого слова class и имени класса;
  • Объявления свойств;
  • Объявление конструктора;
  • Объявления методов.

Объявление класса

Используйте ключевое слово class и следующее за ним имя класса. Затем следует определение класса, заключенное в фигурные скобки. Например:

class Car {
// Определение класса
}

Если вы включаете класс в пакет, то при объявлении нужно включить имя пакета в имя класса. При вызове класса нужно использовать его полное имя, с включенным в него именем пакета. Например, если класс Car содержится в пакете com.person13, то объявление класса должно быть таким:

class com.person13.Car {
// Определение класса
}

И, конечно, при помещении класса в пакет нужно сохранять файл в соответствующем каталоге. В случае с com.person13.Car файл класса Car.as должен быть в каталоге com/person13, (а директория com размещена там, куда указывает classpath. (Например, если ваш classpath включает D:\Swf\Classes, то вы можете сохранить файл класса в D:\Swf\Classes\com\person13\Car.as.)

Объявления свойств

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

class com.person13.Car {

private var _sMake:String;
private var _sModel:String;
private var _nYear:Number;
private var _nMiles:Number;
private var _nInterval:Number;

// Остальные определения класса.

}

Объявление конструктора

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

class com.person13.Car {

private var _sMake:String;
private var _sModel:String;
private var _nYear:Number;
private var _nMiles:Number;
private var _nInterval:Number;

function Car(sMake, sModel, nYear, nMiles) {

_sMake = sMake;
_sModel = sModel;
_nYear = nYear;
_nMiles = nMiles;

}

// Остальные определения класса.

}

В отличие от некоторых других языков, в ActionScript 2.0 конструкторы не перегружаются.

Объявление методов

Затем можно объявить методы вашего класса. Объявление методов подобно объявлениям стандартных функций. Используется ключевое слово function и тот же синтаксис. Помните, что метод является функцией, но связан классом. Но поскольку вы объявляете эту функцию в пределах класса, Flash понимает, что ее нужно связать с классом. Единственное различие между стандартными функциями и методами — это то, что вы можете объявить методы как публичные, приватные или статические. Вот пример того же самого класса Car с двумя методами — публичным и приватным:

class com.person13.Car {

private var _sMake:String;
private var _sModel:String;
private var _nYear:Number;
private var _nMiles:Number;
private var _nInterval:Number;

function Car(sMake, sModel, nYear, nMiles) {

_sMake = sMake;
_sModel = sModel;
_nYear = nYear;
_nMiles = nMiles;

}

public function drive(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;

}

}

Работа с геттерами/сеттерами

Геттеры и сеттеры являются специальными методами, которые доступны за пределами класса как свойства, но определены в пределах класса как методы. К их преимуществам относится то, что эти методы позволяют создавать такие члены класса, которые работают как внешние свойства класса, но могут при этом иметь достаточно сложную внутреннюю логику. На примере класса Car: нам может потребоваться проверка валидности года выпуска авто, так как первый автомобиль появился в 1886 (значит, дата выпуска не может быть меньше 1886) и пробега (он не может быть меньше нуля). Дополнительные преимущества использования геттеров и сеттеров:

  • Они позволяют работать со свойствами типа _nMiles, снаружи класса обращаясь к ним через простое имя типа miles;
  • Они позволяют создавать свойства "только для чтения" или "только для записи";
  • Они позволяют создавать виртуальные свойства — т.е. такие, которые не сопоставлены ни одному из реальных свойств класса, а образовываются динамически как результат обработки неких внутренних значений.

Геттер-метод никогда не принимает параметров и всегда возвращает некое значение. Синтаксис геттер-метода:

function get внешнееИмяСвойства():типВозвращаемогоРезультата {

// Определение метода, включая выражение return.

}

Геттер-метод может, как и другие методы, обладать разными режимами доступа, для чего применяются те же ключевые слова public, private или static. Вот пример простого геттер-метода, который возвращает значение внутреннего свойства класса _nMiles как доступное снаружи класса свойство miles.

public function get miles():Number {

return _nMiles;

}

Синтаксис для сеттер-метода очень похож на синтаксис для геттер-метода за исключением того, что он всегда принимает параметр, никогда не возвращает значения и использует ключевое слово set вместо get. Вот базовый синтаксис:

function set внешнееИмяСвойства(имяПараметра:типДанных):Void {

// Определение метода.

}

И так же, как и в случае с геттер-методом, вы можете использовать модификаторы public, private и static, устанавливающие соответствующий режим доступа с сеттеру. Вот пример сеттер-метода, который связывает новое значение с приватным свойством _nMiles. Заметьте, что он проверяет значение на валидность (должно больше или рано нулю). Если это не так, используется значение по умолчанию 0.

public function set miles(nMiles:Number):Void {

if(nMiles >= 0) {

_nMiles = nMiles;

}

else {

_nMiles = 0;

}

}

Импорт классов

Когда вы помещаете классы в пакеты, нужно в ссылках на этот класс всегда использовать полное имя класса. Это означает, что если вы создали класс com.person13.Car, то для создание экземпляров этого класса конструктор должен быть написан следующим образом:

var car:com.person13.Car = new com.person13.Car("Oldsmobile", "Alero", 2000, 43000);

Хотя можно создать и ярлык для класса. Можно использовать выражение import, чтобы сообщить Flash, о каких пакетах и классах он должен "знать", чтобы вам не приходилось каждый раз включать имя пакета в имя класса. После этого Flash будет автоматически добавлять имя пакета, а вы о нем можете не тревожиться. Вот простой пример с импортом класса Car и созданием его экземпляра:

import com.person13.Car;
var car:Car = new Car("Oldsmobile", "Alero", 2000, 43000);

Такой код читается легче. А если вам приходится часто использовать имя класса, то экономится время, которое вы проводите с клавиатурой.

При импорте классов из пакета можно использовать символ звездочки (*). Например, следующий код импортирует все классы из пакета com.person13:

import com.person13.*;

Создание класса

Конец теории, практикуем создание собственного класса. Начнем с создания класса Car:

  1. Откройте новый ActionScript-файл. Если вы используете Flash MX Professional 2004, то вы можете воспользоваться встроенным в среду разработки редактором ActionScript. В противном случае вы можете использовать ваш любимый текcтовый редактор;
  2. Начнем с объявления класса. Используем ключевое слово class, со следующим за ним именем класса. Затем в фигурных скобках — определение класса:

    class com.person13.Car {

    }

  3. Затем объявим пять приватных свойств. Первые четыре довольно очевидны, а последнее свойство используется для хранения ID интервала вызова метода, который будет определен далее в методах.

    class com.person13.Car {

    private var _sMake:String;
    private var _sModel:String;
    private var _nYear:Number;
    private var _nMiles:Number;
    private var _nInterval:Number;

    }

  4. Затем объявим конструктор. Он будет принимать четыре параметра и присваивать их значения соответствующим свойствам. Обратите внимание, что в двух случаях мы ссылаемся на свойства, которые мы не объявляли, так как они будут добавлены с помощью сеттер-методов. Мы импользуем этот механизм, чтобы включить сюда некоторую логику проверки свойств на валидность

    class com.person13.Car {

    private var _sMake:String;
    private var _sModel:String;
    private var _nYear:Number;
    private var _nMiles:Number;
    private var _nInterval:Number;

    function Car(sMake, sModel, nYear, nMiles) {

    _sMake = sMake;
    _sModel = sModel;
    year = nYear;
    miles = nMiles;

    }

    }

  5. Затем следует объявление методов класса. Сейчас мы создадим публичный метод drive(). Затем мы также создадим приватный метод increment(), который будет вызываться в интервале при вызове метода drive().

    class com.person13.Car {

    private var _sMake:String;
    private var _sModel:String;
    private var _nYear:Number;
    private var _nMiles:Number;
    private var _nInterval:Number;

    function Car(sMake, sModel, nYear, nMiles) {

    _sMake = sMake;
    _sModel = sModel;
    year = nYear;
    miles = nMiles;

    }

    public function drive(nMPH:Number):Void {

    if(nMPH == null || nMPH <= 0) {

    // Если nMPH = null или меньше/равно 0
    // то останавливаем автомобиль
    // путем очистки интервала
    clearInterval(_nInterval);

    }
    else {

    // В противном случае
    // устанавливаем интервал, раз в секунду
    // вызывающий приватный метод increment()
    _nInterval = setInterval(this, "increment", 1000, nMPH);

    }

    }

    private function increment(nMPH:Number):Void {

    // Каждый раз при вызове методв обновляем значение _nMiles,
    // прибавляя к нему nMPH.
    _nMiles += nMPH;

    }

    }

  6. Осталось задать геттер/сеттер методы:

    class com.person13.Car {

    private var _sMake:String;
    private var _sModel:String;
    private var _nYear:Number;
    private var _nMiles:Number;
    private var _nInterval:Number;

    function Car(sMake, sModel, nYear, nMiles) {

    _sMake = sMake;
    _sModel = sModel;
    year = nYear;
    miles = nMiles;

    }

    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;

    }

    }

    public function get miles():Number {

    return _nMiles;

    }

    public function set miles(nMiles:Number):Void {

    if(nMiles >= 0) {

    _nMiles = nMiles;

    }
    else {

    _nMiles = 0;

    }

    }

    public function drive(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;

    }

    }

  7. Сохраните файл в директории "com/person13" (с учетом пути к классам (classpath)). Например, если ваш путь к классам включает D:\Swf\Classes, то сохраняйте в D:\Swf\Classes\com\person13;
  8. Откройте новый Flash-документ (.fla).
  9. В первом кадре главного таймлайна добавьте следующий код ActionScript:
    import com.person13.Car;

    // Функция отображения длины проделанного пути в милях объекта Car
    function displayMileage(carObj:Car):Void {

    trace(carObj.miles);

    }

    // Создаем объект Car
    var car:Car = new Car("Oldsmobile", "Alero", 2000, 43000);

    // Начинаем ехать со скоростью 65 миль в час
    car.drive(65);

    // Устанавливаем интервал для периодического показа пройденного пути
    setInterval(displayMileage, 100, car);

  10. Тестируем клип.

Вы увидите результат в панели Output.

Вывод

Мы рассмотрели основы работы с классами в ActionScript 2.0. На самом деле это еще не все: мы пока не затрагивали расширение классов (extending) и реализацию интерфейсов классов (interfaces). Эти темы будут рассмотрены в третьей части этой статьи, и так уже слишком длинной. Спасибо за вдумчивое чтение и в добрый путь по флэш-океану :-]

Автор: Joey Lott (www.person13.com)

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

 

11.Сентябрь.2003, Security

Авария на сайте: чтобы починить, нужен файл с полицейскими (новая политика безопасности в Flash Player 7)

Если ваше приложение делает что-либо из нижеперечисленного, то вашему сайту срочно нужен файл с описанием междоменной политики безопасности:

  • Загрузка XML или переменных с абсолютных URL;
  • Проверка загрузки клипов через абсолютный URL;
  • Подключение к серверу при помощи XMLSocket.

("Абсолютный URL" — это что-то вроде 'http://www.deneg.net' или 'http://nichego.net');

Если ваш сайт использует что-либо и названного и на нем не выложен файл с описанием междоменной политики безопасности (cross-domain policy), пользователи Flash Player 7 увидят гадкое окно с предупреждением о нарушении безопасности — оно появится при просмотре вашего клипа, созданного под формат Flash Player 6.

Что делать?

Можете почитать статью от того, кто это натворил: Security Changes in Macromedia Flash Player 7 (Deneb Meketa — вот этот изобретатель).

Во Flash Player 6 все это начиналось с того, что придумали политику безопасности:

  • Приложение, хранящееся на одном домене, не может грузить данные с другого домена;
  • Приложение, хранящееся на одном домене, не дает доступа к своим свойствам и методам тем клипам, что загружены с другого домена.

Во Flash Player 7 все стало еще хуже. Во Flash Player 6 приложения с поддоменов имели право обращаться к данным или клипам с родительского домена (и друг к другу). В Flash Player 7 доступ друг к другу/данным могут получить только приложения с точно одного и того же домена. Например, Flash Player 6 позволял клипу, хранящемуся на eshche.deneg.net загрузить XML с uzhe.deneg.net. А Flash Player 7 не позволит.

Вот еще один, более жестокий пример: во Flash Player 7, если вы обращаетесь к сайту по сокращенному URL типа "http://vodki.net" (без "www"), клипы с этого сайта не смогут загрузить данные с его полного URL, "www.vodki.net". Это ограничение касается файлов формата Flash Player 6 и Flash Player 7. Если .swf-файл опубликован под Flash Player 6 (или более ранний), то Flash Player 7 выдаст предупреждение, спрашивая посетителя, можно ли клипу получить доступ к данным с другого домена.

Файл с описанием междоменной политики безопасности поможет решить эти проблемы и автоматизировать доступ к данным на www.yoursite.com из клипа с yoursite.com.

Вот решение проблемы:

  1. Создайте новый текстовый файл с названием crossdomain.xml;
  2. Наполните его содержимым:
    <?xml version="1.0"?> 
    <!DOCTYPE cross-domain-policy 
      SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
    <cross-domain-policy> 
      <allow-access-from domain="www.yoursite.com" /> 
      <allow-access-from domain="yoursite.com" /> 
    </cross-domain-policy>
  3. Сохраните файл и закачайте его в корень сайта yoursite.com (т.е. так, чтобы файл был доступен по адресу "http://www.yoursite.com/crossdomain.xml").

Описанная техника используется также для предоставления доступа к данным сайта с любого внешнего домена.

Например, чтобы дать всем клипам с moock.org доступ к yoursite.com, XML на yoursite.com должен быть таким:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="www.yoursite.com" />
  <allow-access-from domain="yoursite.com" />
  <allow-access-from domain="*.moock.org" />
</cross-domain-policy>

После этого все клипы с moock.org (включая www.moock.org, games.moock.org, и т.д.) получат доступ к данным с yoursite.com. (Заметьте, в файле политики можно использовать символ "*".)

Веб-сервисы типа amazon.com или google.com могут предоставлять доступ к своим данным любому Flash-клипу, используя такие конструкции:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

Если вы держите XMLSocket-сервер типа Unity, вам также не обойтись без полицейского файла, который разрешит клипам, загруженным с www.yoursite.com или yoursite.com подключаться к серверу. Файл с политиками должен быть загружен через HTTP-протокол с домена, на котором находится ваш XMLSocket-сервер. Например, если вы запустили сокет-сервер на moock.org, то нужно запустить на moock.org веб-сервер, в руте которого и хранить файл с политиками и полицейскими:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="www.moock.org" />
  <allow-access-from domain="moock.org" />
</cross-domain-policy>

Без файла с политиками подключиться к серверу не удастся, например, сокет-сервер на moock.org не ответит клипу с www.moock.org.

Заметьте, что описанная политика безопасности не воспрещает обращаться к загруженному клипу из вашего кода. Этот аспект безопасности все еще контролируется свойствами System.security.allowDomain и новым System.security.allowInsecureDomain. Читайте Security Restrictions for Cross-Movie Scripting.

Кое-что можно узнать здесь:

См. также справку к Macromedia Flash 2004: "ActionScript Reference Guide > Working with External Data > Flash Player security features > About allowing cross-domain loading".

// via Colin

Ненавижу политику.

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

 

10.Сентябрь.2003, Strategy

Flash MX 2004 поступила в продажу

Уже можно купить Flash MX 2004 у Macromedia.

Скачать триалы:

//Via makca | anodis

Также появилась новая, обновленная версия Flash Player 7. Это первая официальная версия Flash Player 7, ее номер 7.0.14.0. Вышла 9 сентября 2003 года. Размер файла плагина для версии под Windows/Internet Explorer составляет 466Кб, я для Windows/Netscape — 643Кб.

Раздел devnet сайта Macromedia обновлен статьями по продуктам-2004.

Новые статьи (english):

// via colin moock
Писал Rost, 12:42 PM Отзывов: 5

 

09.Сентябрь.2003, Coding

Введение в ActionScript 2.0 для пользователей ActionScript 1.0: Часть Первая

Если вы привыкли работать с Flash ActionScript, появление ActionScript 2.0 может хорошо вас встряхнуть). Конечно, есть некоторое возбуждение от новых возможностей, появившихся в ActionScript 2.0. В конце концов, 2.0 должно быть лучше, чем 1.0, так? С другой стороны, перспектива изучения нового синтаксиса и новых особенностей языка может несколько охладить пыл первооткрывателя ) В этой статье мы будем рассеивать страхи по поводу ActionScript 2.0.

Начнем с терминологии. ActionScript, на котором вы писали до этого во Flash 5 и Flash MX, теперь называется ActionScript 1.0.

ActionScript 2.0 — это новшество, появившееся в Flash MX 2004 и Flash MX Professional 2004, и по большей части это все тот же ActionScript 1.0. Это означает, что подавляющая часть ваших знаний в ActionScript 1.0 остается актуальной для ActionScript 2.0 (вздохи облегчения). Фактически, если Вы не писали свои классы в ActionScript, разница между ActionScript 1.0 и ActionScript 2.0 будет для вас довольно незначительной. Если вы фанат ActionScript 1.0, вы можете продолжать писать код на ActionScript 1.0. (Поймите, тем не менее, что смешивание ActionScript 1.0 с ActionScript 2.0 может дать нестабильный результат).

Основные отличия ActionScript 2.0 от ActionScript 1.0

  • Строгий контроль типов. Это означает, что теперь вы строго указывете тип данных при объявлении переменной, и после этого переменная может содержать данные только этого одного типа, указанного при объявлении переменной. Например, вы можете объявить переменную типа MovieClip, типа String, Color и т.д. Это также касается и параметров функций. Строгий контроль типов  — это важный шаг к практике хорошего программирования, это помогает убивать множество ошибок еще до их появления, например, пресекать частую в ActionScript 1.0 ошибку, когда в имени переменной вы вводите всего один неверный символ, а потом никак не можете заставить проект заработать;
  • Контроль типа возвращаемого функцией результата. Это похоже на строгий контроль типов. Если функция возвращает некую величину, Вы можете указать тип этой возвращаемой функцией величины. Если функция не будет возвращать никакого значения, тогда Вы можете указать, что функция ничего не возвращает. Это — еще одна возможность, помогающая избегать множества ошибок при кодировании, и это работает рука об руку со строгим контролем типов данных. Например, если Вы указываете, что функция возвращает значение типа String, а потом пытаетесь назначить это возвращенное значение переменной типа Number, то Flash выдаст ошибку;
  • Формальный синтаксис классов. Это, возможно, главная особенность ActionScript 2.0. В ActionScript 1.0 недостает формального синтаксиса классов, взамен используются прототипы. В ActionScript 2.0 реализована поддержка для членов класса, обладающих разными режимами доступа к ним: public (доступен из любого места), private (доступен только внутри класса) и static (это данные и методы, общие для всех объектов класса), а также реализовано полноценное наследование (inheritance) и интерфейсы (interfaces).

Если вы дочитали до этого места: сейчас мы рассмотрим все вышеперечисленное более подробно. Сначала — строгий контроль типов и контроль возвращаемого функцией результата. Затем — формальный синтаксис классов (во второй части).

Строгий контроль типов

Разработчики ActionScript долгое время страдали от беспредела с типами данных, я с другой стороны, честно говоря, были даже несколько избалованы этим. В ActionScript 1.0 вы можете объявить переменную, присвоить ей строковое значение, а затем ей же — числовое и т. п.:

var sProduct = "Flash MX 2004";
sProduct = 6;

Конечно, на таком простом примере ясно, что переменная должна иметь значения только одного типа. Переменная sProduct всегда должна содержать строки типа "Flash MX 2004" или "Dreamweaver MX 2004", но не число 6. Но если ваше приложение достаточно сложно, вы захотите полностью положиться на переменную, чтобы она всегда возвращала ожидаемый вами результат и сама проверяла тип своего значения при присваиваниях, ведь обращение к этой переменной может происходить в самых разных ситуациях, и вы не сможете (да и зачем это нужно) держать в своей голове их все. Например, если вы хотите отобразить значение sProduct, важно чтобы ее значение имело именно тип String, а не какой-либо другой. В этом есть определенный смысл!

Использование ActionScript 1.0 ведет к не самой лучшей практике программирования и к ошибкам, связанным с несоответствием типов данных. Вы тратили многие часы на отладку, просто чтобы найти строку кода, где переменной присваивалось значение неверного типа. Строгий контроль типов в ActionScript 2.0 производится во время компиляции (compile-time) (то есть до этапа выполнения). А значит, если вы случайно попытаетесь присвоить переменной значение неверного типа, то при проверке синтаксиса (она производится автоматически при публикации/экспорте), Flash выдаст сообщение об ошибке, указывая вам, где именно в коде произошел конфликт типов. Чтобы объявить переменную со строгим контролем типа, нужно использовать ключевое слово var, после которого следует имя переменной, затем — двоеточие и тип данных. Имена всех типов данных начинаются с заглавной буквы. Вот пример, где объявляется переменная sProduct типа String:

var sProduct:String = "Flash MX 2004";

После того, как sProduct была объявлена как String, попытка присвоить ей числовое значение приведет к ошибке. Например, если вы попробуете сделать так:

sProduct = 6;

То в окне Output увидите:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required.
sProduct = 6;

Total ActionScript Errors: 1 Reported Errors: 1

Важно: Используйте ключевое слово var только при первом объявлении переменной. Если попытаетесь затем использовать его еще раз с этой же переменной, Flash подумает, что вы объявляете новую переменную. И будет создана новая переменная с тем же самым именем, а оригинал будет перезаписан ею. Например:

var sProduct = 6;

Flash создаст новую переменную с именем sProduct. Новая переменная не будет проходить строгий контроль типов. А контроль типов для оригинальной переменной не будет проходить для новой переменной, так что вы даже не получите никакого сообщения об ошибке. Будьте внимательны с этим.

При использовании строгого контроля типов (далее — "контроль типов") вы получаете в помощники еще одну разновидность подсказок по коду (code hints) — это список возможных типов данных, он появляется после того, как вы введете двоеточие. Рис. 1 показывает это.


Рис. 1: подсказки кода при строгом контроле типов

Дополнительные плюсы контроля типов данных

Их как минимум два:

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

Во Flash MX подсказки по коду были очень удобны, но нужно было всегда использовать правильные суффиксы, чтобы их получать. А с контролем типов в Flash MX 2004 вы можете получать эти подсказки, продолжая использовать ваш любимый способ именования переменных. Например, в данной статье используется модифицированная Венгерская нотация использующая одно-, дву-, и трехсимвольные префиксы в именах переменных. Например, мы использовали переменную sProduct. Префикс "s" указывает на то, что это переменная типа String. Конечно, Flash ничего об этом не знает. И не нужно, потому что тип переменной задан строго, и Flash в нужный момент выдаст правильную подсказку по коду. Вот пример с объявлением переменной, которая ссылается на объект Color. Затем, если я введу имя переменной и точку, появится подсказка по коду. Рис. 2 это демонстрирует.

Рис. 2: еще один пример подсказки по коду

Контоль типа возвращаемого функцией результата

В ActionScript 2.0 вы можете указать тип возвращаемого функциией результата. Это дает вам преимущество: теперь вы уверены, что придерживаетесь ваших собственных намерений и программируете последовательно в пределах вашего собственного кода. Чтобы задать тип возвращаемого результата, нужно после закрывающей скобки оператора вызова функции приписать двоеточие и тип данных. Синтаксис очень похож на тот, что используется при строгом контроле типов переменных. Вот пример, в котором тип возвращаемого функцией результата определяется как Number:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

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

trace(multiply(6, "Flash MX 2004"));

Выдаст такую ошибку (потому что второй параметр строковый, а должен быть числом):

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch.
trace(multiply(6, "Flash MX 2004"));

Total ActionScript Errors: 1 Reported Errors: 1

Вернемся к контролю типа возвращаемого значения. Это работает на вас двумя способами. Если вы забудете вернуть значение правильного типа, то Flash вам об этом скажет. Например, если вы напишете функцию multiply() вот так:

function multiply(nA:Number, nB:Number):Number {
  return "Flash MX 2004";
}

То получите ошибку типа:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: The expression returned must match the function's return type.
return "Flash MX 2004";

Total ActionScript Errors: 1 Reported Errors: 1

Потому что тип реально возвращаемого значения должен соответствовать заявленному типу.

Также, если вы попытаетесь назначить возвращаемое функцией значение некой переменной, Flash проверит, соответствуют ли типы переменной и возвращаемого значения. Например:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

var sProduct:String = multiply(6, 5);

В приведенном примере производится попытка присвоить переменной типа String возвращаемое функцией multiply() значение типа Number. Так как функция multiply() возвращает значение типа Number, Flash выдаст ошибку:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch in assignment statement: found Number where String is required.
var sProduct:String = multiply(6, 5);

Total ActionScript Errors: 1 Reported Errors: 1

Немного о преимуществах

Мы рассмотрели строгий контроль типов данных и контроль типа возвращаемого функцией результата в ActionScript 2.0. Программисты с опытом в языках, уже поддерживающих такие возможности (например, Java, C#, C++) и сами знают, в чем заключаются преимущества такого подхода. Но тем, кто не имеет такого опыта, может показаться, что вместо преимуществ они получают только новые проблемы и ограничения. Так в чем же состоят эти преимущества?

Выше мы уже упоминали о некоторых из них. Вот главные плюсы:

  • Уменьшение количества ошибок, связанных со (случайными) некорректными присваиваниями; это просто означает, что в случае допущения ошибки вы получите сообщения с указанием их места в коде еще на этапе компиляции, и вам не придется искать их самостоятельно по всему коду;
  • Код становится яснее и чище (как минимум — потенциально);
  • Помощь в освоении хороших практик программирования — а значит ваш профессиональный рост как разработчика. Смотришь и видишь — правильный человек код писал );
  • Вы получаете подсказки по коду без необходимости применять для этого суффиксы (при строгом контроле типов).

Важно отметить, что есть множество моментов, для которых не производится проверка на этапе компиляции. Мы видели пример такого момента, когда рассматривали строгий контроль типов — я о возможности перезаписи переменных при повторном объявлении с использованием ключевого слова var. Это нехорошо! Большaя часть языков, реализующих контроль типов, выдаст ошибку при попытке сделать такой трюк. Помните: Flash MX 2004 — это первый релиз с поддержкой ActionScript 2.0. Очевидно, мы увидим множество улучшений в будущих версиях (ага, типа ActionScript 3.0 — прим перев).

Вывод

Надеюсь, это введение в ActionScript 2.0 не напугало кого-либо из присутствующих). Во второй части мы рассмотрим формальный синтаксис классов в ActionScript 2.0.

Автор: Joey Lott (www.person13.com)

Полезно почитать также статью Евгения "John" Потапенко "НЕМНОГО О СЕДЬМОМ FLASH".

Писал Rost, 09:03 PM Отзывов: 18

 

08.Сентябрь.2003, Community

Блог Дена Иванова

Не пропустите это: Ден "Cleoag" Иванов выходит из подполья (ура!) и открывает журнал. Если вы еще не знаете, кто такой Ден Иванов, читайте интервью с Деном Ивановым на сайте www.valyard.ru.

Не беспокойтесь о том, что язык нового журнала — английский. Поскольку Ден пишет коротко и ясно, даже без знания языка можно понять, что к чему. Читайте: www.cleoag.com/blog.

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

 

05.Сентябрь.2003, Flash Updates

Macromedia Flash MX 2004 (Professional)

Насыщенные Интернет-Приложения (RIA) становятся Приложениями

Как и раньше, выход новой версии Macromedia Flash переворачивает умы, расширяет сознание и укрепляет надежду на счастливое будущее человечества. Новая версия — Macromedia Flash MX 2004 (и, в частности, Flash MX 2004 Professional) твердо закрепляет за Flash и так уже установившееся первенство при разработке RIA.

Мы всегда хотели иметь полный контроль над происходящим. Теперь мы его получили, как и несколькими разами раньше, — думаем, вы понимаете, о чем речь.

Флэш — это инструмент контроля

Теперь все смогут все контролировать! Разработчики, дизайнеры, мультимедийщики и даже конечные пользователи получают больше контроля. В этой статье рассказывается, каким образом они получают этот контроль.

Контроль Данных: Data Binding Components

Данные — это кислород, которым дышат RIA. Важность приложения определяется важностью тех данных, которые оно представляет. В новой версии Flash мир веб-сервисов становится доступным через протокол SOAP. Вы можете получать доступ к данным как и раньше, с помощью Macromedia Flash Remoting, но во Flash MX 2004 можно делать это еще проще — через Компоненты Данных (Data components).

Компоненты Данных не отображаются визуально, пользователь не видит их. Для их использования Вам нужно просто указать внешние источники данных (например, XML или веб-сервис) и несколько параметров; компонент сам контролирует соединение, обмен данными и парсинг. Среди этих компонентов встречаются, например, такие, как "разъемы-соединители" (connector), "разрешитель путей или DNS имен" (Resolver), "набор данных" (dataset) — элементарные инструменты, из которых, как из конструктора, можно собирать нужные вам системы обработки данных.

Панель обновленного Инспектора Компонентов является центром управления компонентами данных (среди них улучшенные ListBox, DataGrid и три новых текстовых компонента).


Рис. 1. Панель обновленного Инспектора Компонентов. Опытный наблюдатель заметит компонент-разьем XML Connector, связывающий Numeric Stepper c TextArea

Некоторые фичи панели Инспектора Компонентов:

  • Данные связыватся путем визуального подключения компонентов друг к другу, при этом они пребывают в постоянной синхронизации;
  • Resolver'ы отслеживают только измененные данные, этим самым минимизируя трафик;
  • Производится проверка данных на соответствие встроенным типам данных, включая почтовые индексы и номера телефонов (можно создавать свои типы с помощью ActionScript);
  • Хорошие возможности форматирования — парсинг данных в нужную Вам форму отображения выполняется автоматически.

Волшебство импорта и обработки данных — это, конечно, очень интересное занятие, типа наблюдения за образованием и движением облаков в неприступных скалах Кавказа. Но в конечном счете потребуется показать пользователю результат, чтобы он не заскучал. Компоненты Данных придерживаются стандартной модели разделения кода и визуального представления. Естественно, как и раньше, Вы можете определить "провайдеров данных" (data providers) для UI-компонентов (например, для ListBox). Поскольку UI-компоненты являются завершенными структурными единицами, Вы не обязаны создавать новые элементы, чтобы представлять ваши данные. Проще говоря, все уже есть в этих чудесных компонентах — и работа с данными, и их отображение.

Есть несколько способов управления представлением данных для конкретных рабочих ситуаций. Важно, чтобы Вы видели в этом не просто разделение ролей разработчика и дизайнера — потому что на самом деле это нечто большее, это Хороший и Правильный Способ Разработки Приложений. Независимость слоя визуализации результата (presentation layer) от исходных данных делает ваше приложение более гибким при изменении данных. И наоборот, можно легко изменить визуализацию интерфейса пользователя (по-модному это называют "look and feel" ("смотрите и чувствуйте")) не затрагивая при этом код для работы с данными.

Визуальный Контроль: CSS, картинки в тексте и т.д.

Вы, конечно же, хотите контролировать визуальное представление, будь вы разработчик или дизайнер. Что касается представления текста — вы получите желаемое.

Одним из важнейших улучшений стала поддержка CSS в текстовых полях. На первый взгляд это — просто дополненный объект TextFormat. Тем не менее, данная реализация CSS идет дальше, позволяя импортировать готовые стандартные документы CSS. А поддержка для a:hover тоже вас порадует. Заметьте, что при этом вы сможете использовать не все возможности CSS, известные человечеству по стандартному HTML, — но, тем не менее, набор уже доступных возможностей дает немало.

Изображения встраиваются прямо в HTML

Теперь Вы можете вставлять JPG, SWF или другие подходящие символы прямо в текстовые поля. Текст обтекает картинки:


Рис. 2. Картинка вставлена в текстовое поле, текст автоматически обтекает изображение.

Вы даже можете с помощью кода обращаться ко встроенным в текст SWF'ам, например проигрывать или останаливать их. Великолепно! Я уже сейчас чувствую, как Якоб Нильсен потирает свои потные ручонки, готовясь в письменном виде раскритиковать эту великолепную возможность )

Мелкий, но хорошо читаемый текст

Еще одно долгожданное улучшение. Вас наверняка удручало сглаживание текстов, набранных мелким кеглем. Вы искали пискельные шрифты и затем боролись уже с ними. Забудьте! Теперь эта проблема решается одним кликом (или одной строкой кода, если вам так удобнее). Просто нажмите кнопку "Alias Text" в инспекторе свойств, и дело в шляпе. Текст не сглаживается.

Метрики текста

Теперь можно точнейшим образом узнавать размеры текста. Раньше, во Flash MX, мы использовали для этого метод getTextExtent(), возвращающий ширину и высоту одиночной строки текста, и это давало не очень точный результат! Новые свойства делают доступным весь набор возможных способов форматирования.

Проблема с пикселями решена

Вы устали от борьбы с этим треклятым однопиксельным сдвигом растровых картинок. Теперь можно отдохнуть, проблемы больше нет.

Контроль для пользователя: Macromedia Flash Player 7

Контекстное меню и его друзья

Пользователи получили в свое распоряжение то, к чему успели привыкнуть в броузерах: правый клик, открытие ссылок в новом окне, копирование ссылок. А разработчики могут добавить в контекстное пользовательское меню свои пункты. Единствеенное, что Macromedia оставила за собой — это неyстранимость пункта "About Macromedia Flash Player."

Автоматическое обновление

Проигрыватель теперь умеет обновляться автоматически, так что у пользователей всегда будут установлены свежайшие патчи. Каждые семь дней проигрыватель проверяет наличие новых версий и самостоятельно помогает потребителям обновлять себя же. Продвинутые пользователи могут контролировать частоту проверки новых версий и другие опции увлекательной игры под названием "Использование технологии Flash" ;). Для этого, как и раньше, нужно кликнуть правой кнопкой мыши и выбрать пункт "Settings", а затем нажать кнопку "Advanced" — и вы получите доступ к микроприложению, запускаемому прямо с сайта Macromedia. Здесь можно настроить глобальные установки безопасности (Global Privacy Settings) для управления доступом к камере и микрофону с каждого посещаемого вами сайта, а также указать дисковое пространство, отводимое под хранение зашаренных локальных файлов на вашей машине.

Контроль Видео: настройка входа и выхода

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

Мастер импорта

На первый взгляд, этот многостраничный мастер импорта выглядит как нечто для новичков. Тем не менее, в нем есть такие продвинутые фичи, как возможность порезки видео на клипы и добавления спецэффектов типа "изменение цветового тона" или "кадрирование", делающие этот мастер пригодным для профессионалов. Вы можете также сохранять свои любимые комбинации настроек, чтобы получить быстрый доступ к ним в будущем. Возможно, самая лучшая фича — это возможность указывать data rate, максимально пригодный для ваших пользователей. Macromedia Flash автоматически отрегулирует пропускную способность и качество видеоканала, чтобы придерживаться установленного вами уровня качества. Раньше для достижения таких результатов нужно было пользоваться методом проб и ошибок, а также произносить специальные заклинания и складывать пальцы в хитросплетения мудр, чтобы все получилось как надо.

Экспортер Flash видео (FLV)

Качество отбражения готового видео также повысилось. Теперь видео выглядят более четким и проигрывается быстрее. Полный контроль вы можете получить в Macromedia Flash MX 2004 Professional, так как этот пакет поставлется вместе с экспортером Flash Video (FLV), а он совместим со многими популярными цифровыми видеоредакторами, включая Avid Media Composer и Xpress DV, Apple Final Cut Pro и Discreet Cleaner (отвратительно, но в этом списке отсутствуют продукты от Adobe — Premiere и AfterEffects. Жаль.)). Это означает не только возможность использования вашего любимого видеоредактора, — Вы получаете также дополнительные опции сжатия, недоступные во Flash. Еще одна приятность — переменный битрэйт (variable bit rate, VBR). VBR более гибко реагирует на исходную природу вашего видео — где нужно, битрэйт увеличивается или уменьшается, экономя траффик, ресурсы и т.д. Остальные опции показаны на Рис. 3:


Рис. 3. Экспорт Flash Video (FLV)

Поддержка FLV на этапе выполенения

Файлы FLV, произведенные во внешних редакторах, теперь могут проигрываться в вашем приложении без дополнительной обработки. Раньше Вы должны были импортировать их и создавать SWF-файлы (лишняя работа!) или использовать Macromedia Flash Communication Server (который используется для настоящего потокового видео). Теперь вы можете импортировать и проигрывать FLV-файлы непосредственно — и это большой шаг вперед! Это сокращает время разработки и делает ваши приложения более модульными. Например, человек-производитель видео может экспортировать FLV-файлы и отправлять их непосредственно вашему приложению, а приложение сможет подхватывать их на лету.

Медиа-компоненты

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

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

Контроль проекта: последовательность и точность

Даже если ваша группа разработчиков по физическим размерам сравнима с телефонной будкой, все равно вам необходимо действовать слаженно, чтобы создать более-менее сложный проект. Flash MX 2004 помогает вам справиться с этим, заменяя менеджера проекта, кофеварку и уборщицу (пара последних — пока шутка, но кто знает! :)

Панель Проекта

Хорошие приложения почти всегда пишутся группами людей. Даже если Вы работаете в гордом одиночестве жильца вершин (а по ночам из ваших глаз текут скупые слезы, ведь вам некому пожаловаться на новую глючную версию продукта), новая Панель Проекта во Flash MX Professional 2004 поможет вам централизованно контролировать и поддерживать все рабочие файлы сложного проекта. Естественно, работая в группах, Вы сможете забирать файлы в работу (check out) или "запирать" их (lock), чтобы члены рабочей группы не перезаписывали работу друг друга в одном и том же файле. Панель Проекта использует архитектуру, аналогичную используемой в Dreamweaver MX, так что пользователи Dreamweaver будут приятно удивлены. Есть даже возможность расширения панели проекта для совместимости с уже используемым Вами ПО управления версиями.

ActionScript 2

Новая версия ActionScript (AS2) облегчает управление большими проектами, а также дает возможность выделиться мозговитым разработчикам.

Во-первых, AS2 поддерживает файлы, экспортируемые под Flash Player 6. Это означает, что Вы можете начать изучение AS2, даже если ваши клиенты еще не готовы потребовать установки Flash Player 7 у своих пользователей.

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

Экономия времени: проверка синтаксиса (Spell Checker)

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

Повышение производительности

Подсказки кода (Code hints) и автозавершение (code completion) были, возможно, главными средствами экономии времени во Flash MX. А теперь вам придется делать еще и меньшее количество кликов.

Прилипающее выравнивание

Новая фича Snap Align уникальна. Это настолько просто и элегантно, что даже малейшее объяснение может все усложнить ) В общем, теперь вы можете таскать объекты, и при этом будут появляться пунктирные линии, показывающие, как перетаскиваемое выравнивается относительно других объектов. Интуитивно и понятно. Если вы не влюбитесь в эту фичу — возможно, вы не человек. (Пользователи Adobe Ilustrator, очевидно, вспомнят Smart Guides и только улыбнутся как старому знакомому)


Рис 4. Выравнивание в действии

Приятные мелочи

Субъективный краткий список самых выдающихся приятных мелочей:

  • Все открывающиеся файлы снабжаются закладкой (tab). Переключаться между ними и сохранять их теперь легче;
  • Можно редактировать просто AS-файлы;
  • Инспектор свойств имеет встроенную возможность сохранения пропорций, так что при вводе размеров фигур соотношения сторон сохраняются;
  • Появилась кнопочка "Browse..." в Publish settings. Ура. Наконец-то;
  • Учет типов данных (фича ActionScript 2) облегчает автозавершение кода. Например: если сначала ввести var myS:String="phil" , а затем "myS." — вы увидите подсказку-вариант (code hint) для объекта String;
  • Панели, прилипшие к краю окна, теперь имеют дополнительную кнопку со стрелкой, нажав которую, можно свернуть всю группу, как в Dreamweaver. (Эта фича работает только под Microsoft Windows).

Панель Истории

Последнее, что сэкономит ваше время — Панель Истории. Это нечто большее, чем просто функция "отмены", хотя и это тоже. Код, сгенерированный в Панели Истории, использует язык JavaScript Flash (JSFL), который работает с рабочей средой Macromedia Flash. JSFL позволяет автоматизировать повторяемые или сложные процедуры внутри среды разработки. Почти любая ручная операция в процессе разработки теперь может быть записана и проиграна с помощью скрипта, работающего во время разработки. Панель Истории отослеживает ваши перемещения в среде, используя все тот же язык JSFL. (Привет, Dreamweaver!)


Рис. 5. Панель Истории

Расширение Macromedia Flash: настройка и упрощение рабочего процесса

Новость: Macromedia Flash стала расширяемой! Это означает, что Вы можете модифицировать рабочую область, создавать команды для автоматизации процесса и устанавливать расширения от других производителей. Плагины, вдумайтесь в это! Никто на самом деле не знает, что Вы будете способны сделать в Macromedia Flash MX 2004 в ближайшие несколько месяцев после того, как сообщество флэшеров откроет пути оптимизации рабочего процесса.

Команды JSFL

Панель Истории сама подсказывает, как JSFL производит собственные команды, похожие на макросы. См. рис. 6: там изображена панель Истории после того, как вручную был нарисован графический символ. Посмотрите за кулисы, так сказать!


Рис. 6. Панель истории показывает, что произошло на самом деле

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

1 var width=fl.getDocumentDOM().width;
2 var height=fl.getDocumentDOM().height;
3 fl.getDocumentDOM().addNewRectangle({left:-500, top:-500, right:width+500, bottom:height+500}, 0);
4 fl.getDocumentDOM().selectNone();
5 fl.getDocumentDOM().setSelectionRect({left:0, top:0, right:width, bottom:height});
6 fl.getDocumentDOM().deleteSelection();

Выглядит сложно? А на самом деле просто. Чтобьы создать этот код, нужно сначала просто нарисовать фигуру и тем самым создать черновик процедуры; выбрать прямоугольник и удалить его. Затем скопировать получившийся JSFL из Панели Истории прямо в текстовый файл. Команда будет работать для любого размера рабочей области, так как в качестве размеров указаны свойства width и height.

Используя меню Commands, можно запустить этот или любой другой JSFL-код. Просто сохраните файл и затем загрузите его во Flash. Можно также загружать JSFL прямиком из SWF, предварительно установленного в средe Macromedia Flash. В будущем появится возможность установки т.н. WindowSWF, а пока можно запускать код из открытых в данный момент файлов. Фактически, JSFL может создавать, открывать и сохранять файлы. Можно даже запускать и запускать JSFL в автоматически открываемых копиях Macromedia Flash MX 2004. Уверен, вы найдете отличные способы автоматизации рабочего процесса.

Диалоговые окна интерфейса, описываемые с помощью XML (XML для UI)

JSFL содержит реальные команды для интерфейса рабочей среды Flash, но иногда эти команды нужно завернуть во что-то видимое глазу, типа диалогового окна. Для этого и нужен XML для UI. Это стандартный способ описания взаимодействия среды разработки с пользователем — в основном через использование системных диалогов операционной системы. Например, вышеприведенный пример команд по созданию маскирующего символа можно было бы завернуть в диалог, который спросил бы у пользователя, каким цветом заполнить символ и т.д.

Модели поведения

На самом деле, если бы понадобилось добавить интерфейс для примера с маской, нужно было бы просто создать SWF-файл. Но вот где XML для UI реально необходим — так это Модели Поведения. Вы, вероятно, подумаете, что Модели Поведения — для новичков, чтобы они могли использовать ActionScript контролируемым и безопасным образом. Фактически же, они более полезны именно как метод быстрого включения постоянно используемых частей кода. Модели Поведения — это просто эффективный интерфейс для производимого ими же кода ActionScript. Вы можете вводить параметры с помощью диалогов и редактировать скрипты через тот же интерфейс Модели Поведения.

Настраиваемая Панель Инструментов

Есть еще одна, почти скрытая возможность расширения Macromedia Flash. Выберите пункт меню Edit > Customize Tools Panel, и Вы сможете изменить Панель Инструментов, — например, добавить новый или удалить ненужный инструмент. Хотя в поставляемой версии Flash MX 2004 Вы найдете только один новый инструмент — PolyStar, можете быть уверены, что очень скоро на место в Панели Инструментов появится много новых претендентов. Кстати, Вы можете узнать, как строится PolyStar , посмотрев в файлы класса.

Собственные инструменты легко программируются. Например, расширить стандартную Линию дополнениями в виде стрелок на концах. В основном придется использовать немного математики и язык JSFL, плюс XML для UI (для диалоговых окон, если понадобятся).

Так что будьте готовы. Скоро новые инструменты от разных разработчиков посыплются как из мешка. И не забывайте: у вас есть головы и руки, следовательно, вы можете и сами активно поучаствовать в начинающейся термоядерной реакции под названием Flash MX 2004 )

Если вы хотите быть оповещены о выходе Flash MX 2004, мчите сюда.

Спасибо Дену Иванову за ссылку на вдохновивший материал. Благодарности Иву Дембицки и Dez за помощь при исправлении ошибок. Спасибо всем неравнодушным ). Писал Rost, 08:16 PM Отзывов: 34

 

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


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




++++



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