Вальянов Дмитрий пишет: >>Рост, а вот такие тулзы тебе попадались уже: >>SEPY editor >>http://www.sephiroth.it/phpwiki/index.php/SEPY >>ClassBrowser >>http://www.sephiroth.it/phpwiki/index.php/ClassBrowser >> >>Что скажешь? Нет, знаешь, не встречал как-то раньше ) Class Browser выглядит как очень полезная штука, спасибо! А редактор.. так сразу не скажешь, надо поработать в нем — а вообще выглядит неплохо. —— Рост
Нет, знаешь, не встречал как-то раньше )
Class Browser выглядит как очень полезная штука, спасибо!
А редактор.. так сразу не скажешь, надо поработать в нем — а вообще выглядит неплохо.
—— Рост
Class Browser может очень и очень пригодиться вам, если вы хотите разобраться в иерархии классов Flash MX 2004 (или в структуре своих классов, когда напишете их уже немало). Редактор ActionScript-кода SE|PI еще, конечно, сыроват, но тоже не останется без поклонников.
(А еще — спасибо доброму человеку за ссылки :)
Сайт Ф. Потрошителя перехал на новый сервер. Адрес остался прежним, регистрация доменного имени продлена (спасибо, Mike!), (кстати, 25 сентября 2003 нам исполнился год :).
Было: Сайт Ф. Потрошителя переезжает на новый сервер. В связи с этим в ближайшие пару дней возможны временные перебои в работе сайта, в частности, в системе добавления записей и комментариев.
Зато новый сервер самый лучший! :-]
И спасибо всем, кто с нами :)
Язык 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 еще и автоматически закрылась).
fl.quit();
Зачем это все нужно, спросите вы? О возможных применениях будет полезно поразмыcлить самостоятельно. Простейшее, что сразу приходит в голову — создавать однотипные файлы по шаблону, а не руками (мы же не роботы, правда?). Продолжение следует..
Статья "Введение в ActionScript 2.0 для пользователей ActionScript 1.0: Часть Третья" ("Наследование и интерфейсы") находится в процессе перевода и на днях будет выложена на сайте Ф. Потрошителя.
А пока предлагаем вам насладиться красотой. Вот цитата (по материалам конференции "ruFlash"):
"я это еще нигде не публиковал... только сегодня приснилось: Народ постоянно парится по поводу перевода XML в массивы и прочая. - Нифига это не нужно. Достаточно добавить две строчки кода и на тебе, обращайся к узлам XML как к элементам массива!!!
Народ постоянно парится по поводу перевода XML в массивы и прочая. - Нифига это не нужно. Достаточно добавить две строчки кода и на тебе, обращайся к узлам XML как к элементам массива!!!
- последняя версия находится здесь: http://proto.layer51.com/d.aspx?f=1075
— Ivan Dembicki
Action Script Viewer, самый мощный инструмент для работы с swf-файлами обновлен.
Новые возможности в ASV4:
Ссылки: Домашняя страница ASV. Качать демо-версию ASV3 (версия ASV4 пока не выложена). Заказать ASV4 онлайн ($59.95). Очень хочется верить, что кому-то пригодится эта последняя ссылка :-]
Полезно для разработчиков: этот инструмент поможет вам переключаться с одной версии Flash Player на другую. Flash Plugin Switcher
Спина большой рыбы показалась на поверхности океана. На спине этой рыбы вы найдете информацию о __bytecode__ (из первоисточника) и не только.
__bytecode__
Коснитесь монстра: www.debreuil.com/blog.
Как и обещали, в этой части поговорим о формальном синтаксисе классов в 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
(Если вы можете отличить конструктор от метода, читать это необязательно).
Начнем с освещения ключевых моментов нового синтаксиса и структуры, затем рассмотрим все это поближе.
class
import
public
private
static
extends
Если не все здесь вам знакомо, — не волнуйтесь, продолжайте читать. Далее по тексту все объясняется и приводятся примеры (желательно иметь под рукой 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.
Car
Файлы классов можно хранить в пакетах (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 никогда не подвергнутся опасности конфликта имен.
com.person13
com.ejepo
По умолчанию Flash ищет файлы классов в директории First Run/Classes. Если не находит там, то ищет дальше в директории вашего исходного fla-файла или документа ActionScript. Classpath — это список директорий, в которых Flash ищет файлы класса. Вы можете указать дополнительные директории для classpath или изменить порядок поиска файлов классов по директориям. Выберите меню Edit>Preferences, затем жмите закладку "ActionScript". Потом жмите "ActionScript 2.0 Settings". В открывшемся диалоге используйте кнопку с плюсом, чтобы добавить директорию и т.д. (Надеюсь, дочитавшим до этого места не нужно разжевывать назначение давно знакомых элементов интерфейса — прим перев.)
Рис. 1: определение списка classpath
На рис. 1 все хорошо видно. Мы добавили свою директорию D:\Swf\Classes. На то есть причины:
Класс состоит из членов — свойств и методов. Доступ к членам класса может происходить в разных режимах (публично или приватно). Если вы не использовали некоторые изощренные или недокументированные возможности ActionScript 1.0, то все члены классов ActionScript 1.0 были публичными (public). Когда мы говорим, что член является публичным, это означает, что он доступен извне определения класса. Например, если вы создаете класс Car, а у него — свойство make, доступное из экземпляра класса Car, тогда это свойство является публичным. Но часто вы не хотите, чтобы свойства и методы класса были публично доступны. Класс может иметь свойства и переменные, которые используются только непосредственно внутри него. В таких случаях, вы можете объявить, что член будет приватным (private).
make
Примечание: приватный член класса в ActionScript 2.0 ведется себя подобно защищенному (prtotected) члену в языках типа Java или C#.
Для того, чтобы объявить член класса как публичный или приватный, используйте ключевые слова public и private соответственно. Например, следующий код объявляет приватное свойство:
private var _nInterval:Number;
Мы рассмотрим объявление публичных и приватных членов далее в этом разделе. На примерах все станет намного понятнее (мы создадим собственный класс).
Примечание: Если не указан режим доступа (публичный или приватный), то считается, что член публичный.
Статические члены класса доступны непосредственно из класса, а не из его экземпляров. Это не новое понятие из ActionScript 2.0. Фактически, начиная с Flash 5, появились встроенные классы со статическими членами. Например, класс Math полностью состоит из статических членов. Доступ к свойствам и методам производится непосредственно из класса, без создания экземпляра. Например:
Math
cos()
Упрощенно, класс состоит из таких частей:
Используйте ключевое слово class и следующее за ним имя класса. Затем следует определение класса, заключенное в фигурные скобки. Например:
Если вы включаете класс в пакет, то при объявлении нужно включить имя пакета в имя класса. При вызове класса нужно использовать его полное имя, с включенным в него именем пакета. Например, если класс Car содержится в пакете com.person13, то объявление класса должно быть таким:
И, конечно, при помещении класса в пакет нужно сохранять файл в соответствующем каталоге. В случае с com.person13.Car файл класса Car.as должен быть в каталоге com/person13, (а директория com размещена там, куда указывает classpath. (Например, если ваш classpath включает D:\Swf\Classes, то вы можете сохранить файл класса в D:\Swf\Classes\com\person13\Car.as.)
com.person13.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;
// Остальные определения класса.
}
После объявления свойств класса нужно объявить конструктор. На самом деле, если вы не объявите конструктор явно, Flash сама создаст пустой конструктор. Но даже если ваш конструктор ничего не делает, все равно желательно объявлять его явно. Помните, что конструктор является специальным методом, его имя совпадает с именем класса. Конструктор используется при создании экземпляров. Конструктор должен быть объявлен как обычная функции, и даже если он принимает параметры, он не должен возвращать никакой величины. Вот пример класса Car с конструктором:
function Car(sMake, sModel, nYear, nMiles) {
_sMake = sMake; _sModel = sModel; _nYear = nYear; _nMiles = nMiles;
В отличие от некоторых других языков, в ActionScript 2.0 конструкторы не перегружаются.
Затем можно объявить методы вашего класса. Объявление методов подобно объявлениям стандартных функций. Используется ключевое слово function и тот же синтаксис. Помните, что метод является функцией, но связан классом. Но поскольку вы объявляете эту функцию в пределах класса, Flash понимает, что ее нужно связать с классом. Единственное различие между стандартными функциями и методами — это то, что вы можете объявить методы как публичные, приватные или статические. Вот пример того же самого класса Car с двумя методами — публичным и приватным:
function
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
Геттер-метод никогда не принимает параметров и всегда возвращает некое значение. Синтаксис геттер-метода:
// Определение метода, включая выражение return.
Геттер-метод может, как и другие методы, обладать разными режимами доступа, для чего применяются те же ключевые слова public, private или static. Вот пример простого геттер-метода, который возвращает значение внутреннего свойства класса _nMiles как доступное снаружи класса свойство miles.
public function get miles():Number {
return _nMiles;
Синтаксис для сеттер-метода очень похож на синтаксис для геттер-метода за исключением того, что он всегда принимает параметр, никогда не возвращает значения и использует ключевое слово set вместо get. Вот базовый синтаксис:
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, то для создание экземпляров этого класса конструктор должен быть написан следующим образом:
Хотя можно создать и ярлык для класса. Можно использовать выражение import, чтобы сообщить Flash, о каких пакетах и классах он должен "знать", чтобы вам не приходилось каждый раз включать имя пакета в имя класса. После этого Flash будет автоматически добавлять имя пакета, а вы о нем можете не тревожиться. Вот простой пример с импортом класса Car и созданием его экземпляра:
Такой код читается легче. А если вам приходится часто использовать имя класса, то экономится время, которое вы проводите с клавиатурой.
При импорте классов из пакета можно использовать символ звездочки (*). Например, следующий код импортирует все классы из пакета com.person13:
*
Конец теории, практикуем создание собственного класса. Начнем с создания класса Car:
Затем объявим пять приватных свойств. Первые четыре довольно очевидны, а последнее свойство используется для хранения ID интервала вызова метода, который будет определен далее в методах.
Затем объявим конструктор. Он будет принимать четыре параметра и присваивать их значения соответствующим свойствам. Обратите внимание, что в двух случаях мы ссылаемся на свойства, которые мы не объявляли, так как они будут добавлены с помощью сеттер-методов. Мы импользуем этот механизм, чтобы включить сюда некоторую логику проверки свойств на валидность
_sMake = sMake; _sModel = sModel; year = nYear; miles = nMiles;
drive()
increment()
if(nMPH == null || nMPH <= 0) {
// Если nMPH = null или меньше/равно 0 // то останавливаем автомобиль // путем очистки интервала clearInterval(_nInterval);
// В противном случае // устанавливаем интервал, раз в секунду // вызывающий приватный метод increment() _nInterval = setInterval(this, "increment", 1000, nMPH);
// Каждый раз при вызове методв обновляем значение _nMiles, // прибавляя к нему nMPH. _nMiles += nMPH;
Осталось задать геттер/сеттер методы:
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;
_nYear = 1886;
// Функция отображения длины проделанного пути в милях объекта 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);
Вы увидите результат в панели Output.
Мы рассмотрели основы работы с классами в ActionScript 2.0. На самом деле это еще не все: мы пока не затрагивали расширение классов (extending) и реализацию интерфейсов классов (interfaces). Эти темы будут рассмотрены в третьей части этой статьи, и так уже слишком длинной. Спасибо за вдумчивое чтение и в добрый путь по флэш-океану :-]
Автор: Joey Lott (www.person13.com)
Если ваше приложение делает что-либо из нижеперечисленного, то вашему сайту срочно нужен файл с описанием междоменной политики безопасности:
("Абсолютный 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.
<?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>
Описанная техника используется также для предоставления доступа к данным сайта с любого внешнего домена.
Например, чтобы дать всем клипам с 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
Кое-что можно узнать здесь:
См. также справку к Macromedia Flash 2004: "ActionScript Reference Guide > Working with External Data > Flash Player security features > About allowing cross-domain loading".
// via Colin
Ненавижу политику.
Скачать триалы:
//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
Если вы привыкли работать с 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 может дать нестабильный результат).
MovieClip
String
Color
Number
Если вы дочитали до этого места: сейчас мы рассмотрим все вышеперечисленное более подробно. Сначала — строгий контроль типов и контроль возвращаемого функцией результата. Затем — формальный синтаксис классов (во второй части).
Конечно, на таком простом примере ясно, что переменная должна иметь значения только одного типа. Переменная sProduct всегда должна содержать строки типа "Flash MX 2004" или "Dreamweaver MX 2004", но не число 6. Но если ваше приложение достаточно сложно, вы захотите полностью положиться на переменную, чтобы она всегда возвращала ожидаемый вами результат и сама проверяла тип своего значения при присваиваниях, ведь обращение к этой переменной может происходить в самых разных ситуациях, и вы не сможете (да и зачем это нужно) держать в своей голове их все. Например, если вы хотите отобразить значение sProduct, важно чтобы ее значение имело именно тип String, а не какой-либо другой. В этом есть определенный смысл!
sProduct
"Flash MX 2004"
"Dreamweaver MX 2004"
6
Использование ActionScript 1.0 ведет к не самой лучшей практике программирования и к ошибкам, связанным с несоответствием типов данных. Вы тратили многие часы на отладку, просто чтобы найти строку кода, где переменной присваивалось значение неверного типа. Строгий контроль типов в ActionScript 2.0 производится во время компиляции (compile-time) (то есть до этапа выполнения). А значит, если вы случайно попытаетесь присвоить переменной значение неверного типа, то при проверке синтаксиса (она производится автоматически при публикации/экспорте), Flash выдаст сообщение об ошибке, указывая вам, где именно в коде произошел конфликт типов. Чтобы объявить переменную со строгим контролем типа, нужно использовать ключевое слово var, после которого следует имя переменной, затем — двоеточие и тип данных. Имена всех типов данных начинаются с заглавной буквы. Вот пример, где объявляется переменная sProduct типа String:
var
После того, как sProduct была объявлена как String, попытка присвоить ей числовое значение приведет к ошибке. Например, если вы попробуете сделать так:
То в окне 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 подумает, что вы объявляете новую переменную. И будет создана новая переменная с тем же самым именем, а оригинал будет перезаписан ею. Например:
Flash создаст новую переменную с именем sProduct. Новая переменная не будет проходить строгий контроль типов. А контроль типов для оригинальной переменной не будет проходить для новой переменной, так что вы даже не получите никакого сообщения об ошибке. Будьте внимательны с этим.
При использовании строгого контроля типов (далее — "контроль типов") вы получаете в помощники еще одну разновидность подсказок по коду (code hints) — это список возможных типов данных, он появляется после того, как вы введете двоеточие. Рис. 1 показывает это.
Рис. 1: подсказки кода при строгом контроле типов
Их как минимум два:
Во Flash MX подсказки по коду были очень удобны, но нужно было всегда использовать правильные суффиксы, чтобы их получать. А с контролем типов в Flash MX 2004 вы можете получать эти подсказки, продолжая использовать ваш любимый способ именования переменных. Например, в данной статье используется модифицированная Венгерская нотация использующая одно-, дву-, и трехсимвольные префиксы в именах переменных. Например, мы использовали переменную sProduct. Префикс "s" указывает на то, что это переменная типа String. Конечно, Flash ничего об этом не знает. И не нужно, потому что тип переменной задан строго, и Flash в нужный момент выдаст правильную подсказку по коду. Вот пример с объявлением переменной, которая ссылается на объект Color. Затем, если я введу имя переменной и точку, появится подсказка по коду. Рис. 2 это демонстрирует.
s
Рис. 2: еще один пример подсказки по коду
В ActionScript 2.0 вы можете указать тип возвращаемого функциией результата. Это дает вам преимущество: теперь вы уверены, что придерживаетесь ваших собственных намерений и программируете последовательно в пределах вашего собственного кода. Чтобы задать тип возвращаемого результата, нужно после закрывающей скобки оператора вызова функции приписать двоеточие и тип данных. Синтаксис очень похож на тот, что используется при строгом контроле типов переменных. Вот пример, в котором тип возвращаемого функцией результата определяется как Number:
Обратите внимание, что в этом примере также проводится контроль типов данных для входных параметров функции. Ведь параметры по существу являются переменными, и если вы попытаетесь присвоить им значение неверного типа при вызове функции, Flash сгенерирует ошибку. Например, следующий код:
Выдаст такую ошибку (потому что второй параметр строковый, а должен быть числом):
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch. trace(multiply(6, "Flash MX 2004"));
Вернемся к контролю типа возвращаемого значения. Это работает на вас двумя способами. Если вы забудете вернуть значение правильного типа, то Flash вам об этом скажет. Например, если вы напишете функцию multiply() вот так:
multiply()
То получите ошибку типа:
**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";
Потому что тип реально возвращаемого значения должен соответствовать заявленному типу.
Также, если вы попытаетесь назначить возвращаемое функцией значение некой переменной, 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);
Мы рассмотрели строгий контроль типов данных и контроль типа возвращаемого функцией результата в ActionScript 2.0. Программисты с опытом в языках, уже поддерживающих такие возможности (например, Java, C#, C++) и сами знают, в чем заключаются преимущества такого подхода. Но тем, кто не имеет такого опыта, может показаться, что вместо преимуществ они получают только новые проблемы и ограничения. Так в чем же состоят эти преимущества?
Выше мы уже упоминали о некоторых из них. Вот главные плюсы:
Важно отметить, что есть множество моментов, для которых не производится проверка на этапе компиляции. Мы видели пример такого момента, когда рассматривали строгий контроль типов — я о возможности перезаписи переменных при повторном объявлении с использованием ключевого слова var. Это нехорошо! Большaя часть языков, реализующих контроль типов, выдаст ошибку при попытке сделать такой трюк. Помните: Flash MX 2004 — это первый релиз с поддержкой ActionScript 2.0. Очевидно, мы увидим множество улучшений в будущих версиях (ага, типа ActionScript 3.0 — прим перев).
Надеюсь, это введение в ActionScript 2.0 не напугало кого-либо из присутствующих). Во второй части мы рассмотрим формальный синтаксис классов в ActionScript 2.0.
Полезно почитать также статью Евгения "John" Потапенко "НЕМНОГО О СЕДЬМОМ FLASH".
Не пропустите это: Ден "Cleoag" Иванов выходит из подполья (ура!) и открывает журнал. Если вы еще не знаете, кто такой Ден Иванов, читайте интервью с Деном Ивановым на сайте www.valyard.ru.
Не беспокойтесь о том, что язык нового журнала — английский. Поскольку Ден пишет коротко и ясно, даже без знания языка можно понять, что к чему. Читайте: www.cleoag.com/blog.
Как и раньше, выход новой версии Macromedia Flash переворачивает умы, расширяет сознание и укрепляет надежду на счастливое будущее человечества. Новая версия — Macromedia Flash MX 2004 (и, в частности, Flash MX 2004 Professional) твердо закрепляет за Flash и так уже установившееся первенство при разработке RIA.
Мы всегда хотели иметь полный контроль над происходящим. Теперь мы его получили, как и несколькими разами раньше, — думаем, вы понимаете, о чем речь.
Теперь все смогут все контролировать! Разработчики, дизайнеры, мультимедийщики и даже конечные пользователи получают больше контроля. В этой статье рассказывается, каким образом они получают этот контроль.
Данные — это кислород, которым дышат 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
Волшебство импорта и обработки данных — это, конечно, очень интересное занятие, типа наблюдения за образованием и движением облаков в неприступных скалах Кавказа. Но в конечном счете потребуется показать пользователю результат, чтобы он не заскучал. Компоненты Данных придерживаются стандартной модели разделения кода и визуального представления. Естественно, как и раньше, Вы можете определить "провайдеров данных" (data providers) для UI-компонентов (например, для ListBox). Поскольку UI-компоненты являются завершенными структурными единицами, Вы не обязаны создавать новые элементы, чтобы представлять ваши данные. Проще говоря, все уже есть в этих чудесных компонентах — и работа с данными, и их отображение.
Есть несколько способов управления представлением данных для конкретных рабочих ситуаций. Важно, чтобы Вы видели в этом не просто разделение ролей разработчика и дизайнера — потому что на самом деле это нечто большее, это Хороший и Правильный Способ Разработки Приложений. Независимость слоя визуализации результата (presentation layer) от исходных данных делает ваше приложение более гибким при изменении данных. И наоборот, можно легко изменить визуализацию интерфейса пользователя (по-модному это называют "look and feel" ("смотрите и чувствуйте")) не затрагивая при этом код для работы с данными.
Вы, конечно же, хотите контролировать визуальное представление, будь вы разработчик или дизайнер. Что касается представления текста — вы получите желаемое.
Одним из важнейших улучшений стала поддержка CSS в текстовых полях. На первый взгляд это — просто дополненный объект TextFormat. Тем не менее, данная реализация CSS идет дальше, позволяя импортировать готовые стандартные документы CSS. А поддержка для a:hover тоже вас порадует. Заметьте, что при этом вы сможете использовать не все возможности CSS, известные человечеству по стандартному HTML, — но, тем не менее, набор уже доступных возможностей дает немало.
a:hover
Теперь Вы можете вставлять JPG, SWF или другие подходящие символы прямо в текстовые поля. Текст обтекает картинки:
Рис. 2. Картинка вставлена в текстовое поле, текст автоматически обтекает изображение.
Вы даже можете с помощью кода обращаться ко встроенным в текст SWF'ам, например проигрывать или останаливать их. Великолепно! Я уже сейчас чувствую, как Якоб Нильсен потирает свои потные ручонки, готовясь в письменном виде раскритиковать эту великолепную возможность )
Еще одно долгожданное улучшение. Вас наверняка удручало сглаживание текстов, набранных мелким кеглем. Вы искали пискельные шрифты и затем боролись уже с ними. Забудьте! Теперь эта проблема решается одним кликом (или одной строкой кода, если вам так удобнее). Просто нажмите кнопку "Alias Text" в инспекторе свойств, и дело в шляпе. Текст не сглаживается.
Теперь можно точнейшим образом узнавать размеры текста. Раньше, во Flash MX, мы использовали для этого метод getTextExtent(), возвращающий ширину и высоту одиночной строки текста, и это давало не очень точный результат! Новые свойства делают доступным весь набор возможных способов форматирования.
getTextExtent()
Вы устали от борьбы с этим треклятым однопиксельным сдвигом растровых картинок. Теперь можно отдохнуть, проблемы больше нет.
Пользователи получили в свое распоряжение то, к чему успели привыкнуть в броузерах: правый клик, открытие ссылок в новом окне, копирование ссылок. А разработчики могут добавить в контекстное пользовательское меню свои пункты. Единствеенное, что Macromedia оставила за собой — это неyстранимость пункта "About Macromedia Flash Player."
Проигрыватель теперь умеет обновляться автоматически, так что у пользователей всегда будут установлены свежайшие патчи. Каждые семь дней проигрыватель проверяет наличие новых версий и самостоятельно помогает потребителям обновлять себя же. Продвинутые пользователи могут контролировать частоту проверки новых версий и другие опции увлекательной игры под названием "Использование технологии Flash" ;). Для этого, как и раньше, нужно кликнуть правой кнопкой мыши и выбрать пункт "Settings", а затем нажать кнопку "Advanced" — и вы получите доступ к микроприложению, запускаемому прямо с сайта Macromedia. Здесь можно настроить глобальные установки безопасности (Global Privacy Settings) для управления доступом к камере и микрофону с каждого посещаемого вами сайта, а также указать дисковое пространство, отводимое под хранение зашаренных локальных файлов на вашей машине.
Произошли улучшения во многих аспектах работы: от процедуры импорта видео и настройки его входного качества, до точной настройки экспорта готового видеопродукта.
На первый взгляд, этот многостраничный мастер импорта выглядит как нечто для новичков. Тем не менее, в нем есть такие продвинутые фичи, как возможность порезки видео на клипы и добавления спецэффектов типа "изменение цветового тона" или "кадрирование", делающие этот мастер пригодным для профессионалов. Вы можете также сохранять свои любимые комбинации настроек, чтобы получить быстрый доступ к ним в будущем. Возможно, самая лучшая фича — это возможность указывать data rate, максимально пригодный для ваших пользователей. Macromedia Flash автоматически отрегулирует пропускную способность и качество видеоканала, чтобы придерживаться установленного вами уровня качества. Раньше для достижения таких результатов нужно было пользоваться методом проб и ошибок, а также произносить специальные заклинания и складывать пальцы в хитросплетения мудр, чтобы все получилось как надо.
Качество отбражения готового видео также повысилось. Теперь видео выглядят более четким и проигрывается быстрее. Полный контроль вы можете получить в 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, произведенные во внешних редакторах, теперь могут проигрываться в вашем приложении без дополнительной обработки. Раньше Вы должны были импортировать их и создавать 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 (AS2) облегчает управление большими проектами, а также дает возможность выделиться мозговитым разработчикам.
Во-первых, AS2 поддерживает файлы, экспортируемые под Flash Player 6. Это означает, что Вы можете начать изучение AS2, даже если ваши клиенты еще не готовы потребовать установки Flash Player 7 у своих пользователей.
В то время как всеобщая миграция к новой версии направлена на полную совместимость с ECMAScript, во Flash есть несколько интересных особенностей. Cтрогий контроль типов данных делает ваш код более ясным, а ошибки при компиляции описываются более детально. Объявления функций для классов стали модульными, поскольку они живут теперь в отдельных внешних файлах. Вы можете создавать классы, которые позволят вам смешивать и сочетать; например, Вы можете расширить один класс, который изначально загружает только изображения, чтобы он загружал и проигрывал и звуки также. Написание файлов класса — это как дополнение ActionScript вашей собственной библиотекой инструментов.
Наконец во Flash появился свой спеллчекер. Обратите внимание также на новые поиск и замену — поскольку, подобно многим другим уникальным характеристикам Flash, Вы можете искать не только текст, но и места использования конкретного шрифта или цвета в графических элементах. Ваше время экономится, производительность растет, заказчик улыбается.
Подсказки кода (Code hints) и автозавершение (code completion) были, возможно, главными средствами экономии времени во Flash MX. А теперь вам придется делать еще и меньшее количество кликов.
Новая фича Snap Align уникальна. Это настолько просто и элегантно, что даже малейшее объяснение может все усложнить ) В общем, теперь вы можете таскать объекты, и при этом будут появляться пунктирные линии, показывающие, как перетаскиваемое выравнивается относительно других объектов. Интуитивно и понятно. Если вы не влюбитесь в эту фичу — возможно, вы не человек. (Пользователи Adobe Ilustrator, очевидно, вспомнят Smart Guides и только улыбнутся как старому знакомому)
Рис 4. Выравнивание в действии
Субъективный краткий список самых выдающихся приятных мелочей:
var myS:String="phil"
"myS."
Последнее, что сэкономит ваше время — Панель Истории. Это нечто большее, чем просто функция "отмены", хотя и это тоже. Код, сгенерированный в Панели Истории, использует язык JavaScript Flash (JSFL), который работает с рабочей средой Macromedia Flash. JSFL позволяет автоматизировать повторяемые или сложные процедуры внутри среды разработки. Почти любая ручная операция в процессе разработки теперь может быть записана и проиграна с помощью скрипта, работающего во время разработки. Панель Истории отослеживает ваши перемещения в среде, используя все тот же язык JSFL. (Привет, Dreamweaver!)
Рис. 5. Панель Истории
Новость: Macromedia Flash стала расширяемой! Это означает, что Вы можете модифицировать рабочую область, создавать команды для автоматизации процесса и устанавливать расширения от других производителей. Плагины, вдумайтесь в это! Никто на самом деле не знает, что Вы будете способны сделать в Macromedia Flash MX 2004 в ближайшие несколько месяцев после того, как сообщество флэшеров откроет пути оптимизации рабочего процесса.
Панель Истории сама подсказывает, как JSFL производит собственные команды, похожие на макросы. См. рис. 6: там изображена панель Истории после того, как вручную был нарисован графический символ. Посмотрите за кулисы, так сказать!
Рис. 6. Панель истории показывает, что произошло на самом деле
И, наконец, команды из Панели Истории можно сохранять для проигрывания в будущем. Можно отредактировать JSFL и автоматизировать процесс еще больше. Например, вот код для рисования фигуры, маскирующей рабочую область:
Выглядит сложно? А на самом деле просто. Чтобьы создать этот код, нужно сначала просто нарисовать фигуру и тем самым создать черновик процедуры; выбрать прямоугольник и удалить его. Затем скопировать получившийся JSFL из Панели Истории прямо в текстовый файл. Команда будет работать для любого размера рабочей области, так как в качестве размеров указаны свойства width и height.
width
height
Используя меню Commands, можно запустить этот или любой другой JSFL-код. Просто сохраните файл и затем загрузите его во Flash. Можно также загружать JSFL прямиком из SWF, предварительно установленного в средe Macromedia Flash. В будущем появится возможность установки т.н. WindowSWF, а пока можно запускать код из открытых в данный момент файлов. Фактически, JSFL может создавать, открывать и сохранять файлы. Можно даже запускать и запускать JSFL в автоматически открываемых копиях Macromedia Flash MX 2004. Уверен, вы найдете отличные способы автоматизации рабочего процесса.
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, мчите сюда.
Совсем древнее: 17-20.09.2002, 23-30.09.2002, 01-04.10.2002, 07-11.10.2002, 14-19.10.2002, 20-26.10.2002, 27.10-02.11.2002, 04-08.11.2002, 11-16.11.2002, 18-23.11.2002 25-30.11.2002, 02-07.12.2002, 09-14.12.2002 Сайт заработал 17.09.2002