Flash Ripper RSS Readers

Выведение из ActionScript 1 и 2 одной страницей

Скажи "привет!" AS3-у -- говорит Колин Мук и выкладывает на одной короткой странице тезисы и примечания к своей лекции "Введение в ActionScript 3", прочитанной им на недавно прошедшем фестивале Flash In Da Can в Торонто. Основные темы:

  • Новая виртуальная машина AVM2 и ее отношения с AVM1;
  • Основной язык ("core language") и программный интерфейс проигрывателя (player API) как две взаимодополняющие части языка ActionScript: эволюционное развитие первого и полная переделка второго в новом проигрывателе Flash Player 9;
  • E4X -- работа с XML;
  • API рисования;
  • Бесплатный компилятор ActionScript 3;
  • Модель событий;
  • Мусорные баки и дети Контейнеры и потомки;

Данные тезисы (а еще лучше -- их англоязычный оригинал на сайте Колина, ссылка была выше) можно смело использовать в качестве путеводителя по главным темам языка ActionScript 3.

Наверное, стоит выложить их тут по-русски. Перевод тезисов Колина на русский язык (стиль и оформление -- авторские):

© 2006 Colin Moock's Notes on His ActionScript 3.0 Lectures at FIDC:

обзор

общее введение в ActionScript 3.0

более глубокое изучение выбранных тем

  • E4X
  • api дисплея
  • модель событий
  •  

    начнем с начала

    новая виртуальная машина: "AVM2"

    ActionScript 1.0 и ActionScript 2.0: "AVM1"

    AVM1 и AVM2 работают одновременно в одном проигрывателе

    AVM2 переписана с нуля

  • произодительность
  • сложность
  • больше никаких хаков (спасибо, но все равно не верится ;)
  • основной язык (core language) против API проигрывателя (player API)

    ActionScript состоит из "основного языка" и "api проигрывателя"

    Основной язык ActionScript 3.0 как следующий шаг в эволюции ActionScript 2.0

    api проигрывателя: капитальный ремонт; решительные и далеко идущие изменения

    основной язык: главные изменения

    полностью переконструирован для производительности

  • "запечатанные" классы против динамических классов
  • исключения на этапе выполнения (runtime exceptions)

    E4X

    регулярные выражения

    основной язык: второстепенные изменения

    предупреждения о недостающих объявлениях типов

    ключевое слово final

    модификаторы public, internal, protected, private

    каждый класс должен быть в пакете

    переопределения (overrides) должны быть объявлены

    переменные и функции уровня пакета

    выражения на уровне класса

    константы

    связанные методы

    типы int, uint, Number

    * против Object

    Void теперь void

    значения параметров по умолчанию

    параметр ... (rest)

    ошибки при несовпадении аргументов/параметров

    выражение is приходит на смену instanceof

    цикл for-each-in

    flash player api

    полностью переписан и реорганизован

    значительно более ооп-ориентирован

    основные моменты

  • api дисплея
  • модель событий
  • посимвольные и построчные метрики текста (per-character and per-line text metrics) -- ура!
  • отражение (reflection): describeType()
  • двоичный сокет (binary socket)
  • двоичные данные (binary data (ByteArray))
  • flex

    Flex Builder

    Flex Framework

    Flex Data Services

    бесплатно!

    бесплатный компилятор из командной строки: ActionScript 3.0 + Flex Framework

    E4X

    XML является встроенным типом данных в ActionScript 3.0

    var novel:XML = <BOOK ISBN="0141182806"> <TITLE>Ulysses</TITLE> <AUTHOR>Joyce, James</AUTHOR> <PUBLISHER>Penguin Books Ltd</PUBLISHER> </BOOK>;

    novel.AUTHOR // Все элементы-потомки <BOOK> с именем "AUTHOR"

    trace(novel.TITLE); // Выводит: Ulysses

    trace(novel.@ISBN); // Выводит: 0141182806

    novel.AUTHOR = "Hemingway, Ernest";

    novel.PUBLISHER = "Scribner";

    novel.@ISBN = "0684800713";

    E4X: обход XML-дерева с помощью for-each-in

    var order:XML = <ORDER> <ITEM SKU="209"> <NAME>Trinket</NAME> <PRICE>9.99</PRICE> <QUANTITY>3</QUANTITY> </ITEM> <ITEM SKU="513"> <NAME>Gadget</NAME> <PRICE>149.99</PRICE> <QUANTITY>1</QUANTITY> </ITEM> <ITEM SKU="374"> <NAME>Toy</NAME> <PRICE>39.99</PRICE> <QUANTITY>2</QUANTITY> </ITEM> </ORDER> // Задать начальное значение суммарной стоимости как 0. var total:Number = 0; // Этот цикл срабатывает один раз для каждого элемента <ITEM>. for each (var item:XML in order.*) { total += item.QUANTITY * item.PRICE; } trace(total);

    E4X: фильтрующие логические условия (filtering predicate)

    var staff:XML = <STAFF> <EMPLOYEE ID="501" HIRED="1090728000000"> <NAME>Marco Crawley</NAME> <MANAGER>James Porter</MANAGER> <SALARY>25000</SALARY> <POSITION>Designer</POSITION> </EMPLOYEE> <EMPLOYEE ID="500" HIRED="1078462800000"> <NAME>Graham Barton</NAME> <MANAGER>James Porter</MANAGER> <SALARY>35000</SALARY> <POSITION>Designer</POSITION> </EMPLOYEE> <EMPLOYEE ID="238" HIRED="1014699600000"> <NAME>James Porter</NAME> <MANAGER>Dorian Schapiro</MANAGER> <SALARY>55000</SALARY> <POSITION>Manager</POSITION> </EMPLOYEE> </STAFF> // XMLList, содержащий всех работников var allEmployees:XMLList = staff.*; // XMLList, содержащий Marco и Graham var employeesUnderJames:XMLList = allEmployees.(MANAGER == "James Porter");

    api дисплея

    делит работу дисплея на три уровня

  • отображение (display)
  • интерактивность (interactivity)
  • сдерживание (containment)
  • основные классы api дисплея

    нова платформа основа создания отображаемых объектов (они же -- объекты дисплея)

    var t:TextField = new TextField()

    var mc:MovieClip = new MovieClip()

    список отображения

    иерархия всех отображаемых в данный момент объектов

    корнем (root) иерархии является экземпляр объекта Stage

    экземпляр объекта Stage -- это контейнер

    первый потомок Stage's загружается автоматически: это главный класс .swf-приложения

    отображаемые объекты могут существовать в состоянии открепления (detached) отдельно от списка отображаемых объектов (display list)

    состояние объекта (его свойства) сохраняются, даже когда он отделен от списка отображения

    контейнеры и потомки

    DisplayObjectContainer.addChild()

    DisplayObjectContainer.removeChild()

    DisplayObjectContainer.addChildAt()

    DisplayObjectContainer.removeChildAt()

    автоматическое сворачивание уровней глубины (depths auto-collapse) при удалении потомков

    векторное рисование

    Классы Sprite и Shape определяют объект Graphics для векторного рисования

    var rect:Shape = new Shape(); rect.graphics.lineStyle(1); rect.graphics.beginFill(0x0000FF, 1); rect.graphics.drawRect(0, 0, 75, 50);

    пример использования api дисплея

    package { import flash.display.*; import flash.text.TextField; public class GreetingApp extends Sprite { public function GreetingApp() { // Создать прямоугольник var rect:Shape = new Shape(); rect.graphics.lineStyle(1); rect.graphics.beginFill(0x0000FF, 1); rect.graphics.drawRect(0, 0, 75, 50); // Создать текстовое сообщение var greeting_txt:TextField = new TextField(); greeting_txt.text = "Hello world"; greeting_txt.x = 60; // Добавить элементы в список отображаемых addChild(greeting_txt); // Глубина 0 addChild(rect); // Глубина 1 // Создать круг var circle:Shape = new Shape(); circle.graphics.lineStyle(1); circle.graphics.beginFill(0xFF0000, 1); circle.graphics.drawCircle(0, 0, 25); circle.x = 75; circle.y = 35; // Поместить круг под прямоугольником addChildAt(circle, getChildIndex(rect)); } } }

    собственные классы для работы с дисплеем

    классы дисплея можно расширять

    package { import flash.display.Shape; public class Rectangle extends Shape { public function Rectangle (w:Number = 100, h:Number = 100, lineThickness:Number = 1, lineColor:uint = 0x000000, fillColor:uint = 0xFFFFFF) { graphics.lineStyle(lineThickness, lineColor); graphics.beginFill(fillColor, 1); graphics.drawRect(0, 0, w, h); } } }

    addChild(new Rectangle(10, 10));

    модель событий: регистрация

    основной код

    someObj.addEventListener(EventName, listenerFunction)

    public function listenerFunction (e:EventType):void { trace("вызвано событие"); }

    код примера

    var s:Sprite = new Sprite(); s.addChild(new Rectangle(25, 25)); s.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);

    public function mouseDownListener (e:MouseEvent):void { trace("слушатель события mouse down услышал то, что нужно"); // Метод связян с текущим объектом (делегирование событий встроено в проигрыватель) trace("текущий объект: " + this); }

    модель событий: поток событий

    объекты дисплея используют трехфазный поток событий:

  • сбор событий(capture)
  • целевой объект события (target)
  • пузырь и его всплывание (bubble)
  • var s:Sprite = new Sprite(); s.addChild(new Rectangle(25, 25)); s.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); // Регистрация родителя для фазы сбора addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener, true); // Регистрация родителя для фазы пузырения addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); addChild(s);

    public function mouseDownListener (e:MouseEvent):void { trace("слушатель события mouse down услышал то, что нужно"); trace(" фаза события: " + e.eventPhase); trace(" текущая цель события: " + e.currentTarget + ", final target: " + e.target + "\n"); }

    модель событий: ваши собственные события

    package { import flash.events.*; public class Game extends EventDispatcher { // ИМЯ_СОБЫТИЯ: пишите их ВСЕГДА_ЗАГЛАВНЫМИ // для разделения слов используйте символ подчеркивания // имена хороши в своем настоящем времени public static const GAME_OVER:String = "GAME_OVER"; public function die ():void { dispatchEvent(new Event(Game.GAME_OVER)); } } }

     

    Писал Rost, 26 Апрель 2006 14:19

    Найдены баги:

    -> Наверное, стоит выложить их тут по-русски
    еще как стоит!

    SHAGGYSMILE - 26 Апрель 2006 14:51

    Уже почти перевел. Через полчаса выложу.

    Рост - 26 Апрель 2006 15:04

    данке шён шён (:

    Woozle - 26 Апрель 2006 23:11

    где картинка-то?

    judgefog - 27 Апрель 2006 13:26

    Картинка уже на месте. Простите дядьку -- забыл, что URL тут абсолютный нужон был ;)

    Рост - 27 Апрель 2006 14:52

    25cee43492f175b90772377207c0552b d tg peccato menu invia valerio morgagni locandina ristorante decorare 59a34f61cb342c51ca287596994564ea

    Tristin - 18 Март 2007 20:16



    Это запись из категории 'Flex 2'. 10 еще cвежих:

    Архивы по категориям:

    3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

    За последние месяцы:

    Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

    Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

    Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

    Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

    Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

    Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





    Примечания:
    Статус документа
    : в процессе
       2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)