katopz выложил пример Papervision3D Flex-приложения.
Что такое Papervision3D? Сейчас это лучшее решение для создания 3D в AS2 и AS3, а теперь и во Flex (хоть и со скрипом, как признался katopz).
Другие безбашенные примеры нового 3d -- в блоге Papervision3D.
Кстати, к команде papervision3d недавно присединился John Grden, автор героя предыдущей записи -- XRay.
Да, и это -- open source.
John Grden, автор Xray -- лучшего инструмента для диагностики флэш-приложений, выпустил долгожданный Xray Flex2 connector (zip 24 КБ, альфа-версия).
Это не релиз, но это уже работает, и если вы имели дело с XRay для AS2 / MTASC, то вам не нужно его особо рекламировать, скроллируйте сразу до слов "Использование Xray Flex2 connector".
Тем, кто не в курсе: Xray -- это лучший (кстати, финалист FlashForward) отладчик для отладки флэш/as2, а теперь и флекс/as3 приложений на этапе выполнения. Он состоит из двух частей: Xray-коннектора, внедряемого в отлаживаемое приложение, и Xray-интерфейса, позволяющего не только осматривать приложение в его исходной иерархической структуре, но и управлять им, в том числе -- выполнять скрипты, применять (новые) фильтры, изменять свойства, работать c загруженными видео- и аудио- объектами.
Итак, все просто: Xray-конннектор внедряется в приложение, чтобы контролировать его через Xray-интерфейс. Коннектор можно вкомпилировать в приложение, а можно подгрузить уже на этапе выполнения -- в таком случае вы получаете еще и уменьшение веса, связанности и времени компиляции.
Джон Грден решился выпустить эту альфа-версию, так как люди очень просили Xray для Flex (я тоже молил Авалокитешвару, и он услышал меня). Немного о текущем состоянии:
Автор пишет, что пользуется инструментом уже несколько недель и перечисленные функции у него работают устойчиво.
import com.blitzagency.xray.inspector.flex2.Xray; // создать экземпляр Xray-коннектора private var xray:Xray = new Xray();
2. Запустить Xray Interface и пользоваться. Видео-уроки -- там же.
Джон говорит, что в разботке ему сильно помогли методы describeType() и getQualifiedClassName() флекс-фреймворка. Именно багодаря им по сравнению с XRay для AS2 код анализа объектов в XRay для Flex уменьшился в 1000 раз. Так и пишет, не шучу.
describeType()
getQualifiedClassName()
Примечание от Джона: в скачанном архиве не обращайте внимания на класс Xray.as в пакете com.blitzagency.xray.inspector -- этот класс предназначался для использования с чистым AS3 (без Flex-framework), но в данный момент не работает. Джон говорит, что сначала и он работал, но Грден сделал для поддержки Flex, и до сих пор не откатился до пред. версии. Подождем.
Xray.as
com.blitzagency.xray.inspector
Примечание от меня: в скачанном архиве есть один баг, а скорее опечатка, это неверный импорт в классе Xray.as, из-за которого класс FlexObjectInspector не находится:
FlexObjectInspector
import com.blitzagency.xray.inspector.Flex2.FlexObjectInspector;
-- здесь выделенную жирным курсивом букву 'F' нужно заменить на 'f', чтобы проект скомпилировался.
И все это очень даже хорошо работает. Ссылки:
Оказывается, сайт Фотрошителя уже черт знает когда существует в сети toodoo.ru, а я об этом и не знал, пока не пошел туда сам записываться.
Профиль Фотрошителя в toodoo.
Офигительно сделан сервис -- спасибо, ребята!
Потому что этот сайт не уважет своих посетителей. Я хотел почитать статью Джесси Уордена; найдите ее здесь:
Это сайт для профессионалов: контент толковый, публикуется куча отличных статей, в том числе и от Кости "constantiner" Ковалева, но сам сайт -- убитый, живущий глубоко во вчерашнем дне.
Их скоро кто-то сметет, если не опомнятся.
Переведена на русский язык статья, объясняющая совместное использование универсального языка haXe и Flex2 Framework. Темы статьи:
В результате получается тесная взаимосвязь двух технологий, возможность взаимного вызова методов и обмена данными между двумя приложениями.
Один из интереснейших побочных моментов -- использование haXe для создания библиотеки AS3-классов с помощью команды haxe -gen-hx-classes filename.swf. Дает интересную пищу для размышлений, бывает даже информативнее стандартной опции компилятора -keep-generated-actionscript, хоть и не включает полный исходный код классов.
haxe -gen-hx-classes filename.swf
-keep-generated-actionscript
Демо сцена, ремесло создания арта из программного кода, обрела свое второе рождение на платформе Flash.
Введение бинарных операций и растровых эффектов сделало свое дело: люди начали создавать демки на флэше, и уже проводят конкурсы, например flashscene.org.
Вот -- блог одного из победителей flashscene.org в категории 32K.
Если я об этом уже писал, то все равно. Ведь, с другой стороны, происходит второе рождение флэша как инструмента создания арта, а не только Очень-Важных-Огромных-Расширяемых-До-Бесконечности-Бизнес-Приложений.
Лишь бы Адоб не облажался и догадался бы не просто заточить новый Flash 9 под дизайнеров, но и сделать это хорошо.
Наступают интересные времена, и это надолго.
В рунете же сейчас не так много людей, и еще меньше — флэш-разрабочиков, занимающихся исследованием области демо-арта. Неплохую работу в этом направлении делает Татьяна '0xFFFFFF' Белая, посмотрите категории "1К", BitmapData, effect, exp и musical в ее блоге (new! :).
Некая фирма из Санкт-Петербурга создала продукт Trusted Opinion с сердцем из флэша, попавший в обзор TechCrunch и получивший весьма хвалебный отзыв.
А кого конкретно поздравлять? Кто это сделал, а?
Иногда (а скорее, даже часто) можно услышать вопрос типа: а покажите мне, что на Флексе сделано? Или вот такое утверждение: смотри, какая крутая flex-апликация!
И это правильно, разработчики должны меряться письками, -- это же прямая стимуляция всего интеллектуального хозяйства, от муладхары вверх до самой сахасрары.
Но в подобных ситуациях бывает так, что аскающему показывают флекс-проект, а он не видит там никакого флекса, и получается даже как-то неудобно перед ребятами, как будто кто-то кого-то обмануть пытался. Но тут нет никакого обмана. Просто флекса не существует, поэтому так сложно его показать.
Важно выяснить, как именно не существует флекс.
Начнем с главного -- что такое Флекс? Флекс -- это фреймворк для разработчика. Это инструментарий, способствующий быстрому созданию сложных и громоздких (если бы использовался голый Actionscript 3) конструкций. Но вся работа флекса -- за кадром, в скомпилированном проекте никакого флекса нет -- это все тот же старый добрый флэш, только под новую версию проигрывателя.
С точки зрения конечного пользователя, флекса не существует вообще. Есть флэш-проигрыватель, который теперь вместо 8 стал 9, обогатившись новыми возможностями типа бинарных операций и e4x. Но работать с этими нововведениями можно, и не прибегая к флексу, достаточно писать на Actionscript 3.
По большому счету, и флэша нет.
Мне даже как-то неудобно это говорить, пахнет старой и очевидной мыслью: ценность приложения в том, насколько эффективно оно решает свои задачи, а совсем не в том, на какой платформе оно сделано.
Оказывается, очень просто. Чтобы ячейки Flex2-компонента TileList выглядели, как шахматная доска, достаточно задать свойство стиля alternatingItemColors, в качестве значения принимающее массив hex-цветов:
alternatingItemColors
<mx:TileList alternatingItemColors="[#66FF66, #33CC33]" ... />
Цветов может быть больше двух; соответственно будет варьироваться результат. Можно получить полосатый TileList или TileList психоделический.
А поскольку CSS свойство alternatingItemColors наследуется от класса ListBase всеми списко-образными компонентами, то и работает для их всех:
- List (красит строки) - HorizontalList (красит столбцы) - TileList (красит строки и столбцы) - DataGrid (красит строки) (надо проверить, как работает в PrintDataGrid) - Tree (строки) - Menu (строки)
А как покрасить ячейки в зависимости от данных, смотрите у Питера Энта и у Майка Нимера (эту ссылку у Горбатова подмотрел).
Остальные способы раскраски DataGrid с помощью itemRenderer'ов и наследования от DataGrid -- у того же Энта: Coloring the Background of DataGrid Cells.
SyntaxHighlighter -- это утилита для форматирования, раскрашивания и вывода на экран программного кода. В данный момент поддерживаются языки:
ActionScript2, C#, CSS, C++, Delphi, Java, JavaScript, PHP, Python, Ruby, SQL, Visual Basic, XML / HTML.
Возможности:
А Syntax Highlight Manager -- это сервис по настройке цветовой палитры для SyntaxHighlighter.
С помощью этого можно будет форматировать, раскрашивать и публиковать свой код с выбранными настройками.
Следите за рекламой.
Вдобавок к анонсированному Floogle -- флэш-поиску от Nirth'a, существует еще одна реализация Google Co-op, -- поиск по флэш-ресурсам от Кузена. Ищет по куче флэш-сайтов.
На сайте tcoz.com выложена весьма интересная онлайн-версия Flex 2 API от TCOZ, созданная с помощью Sparx Enterprise Architect.
В отличие от официального Flex 2 API, в ней есть возможность просмотра некоторых дополнительных аспектов сложной структуры Flex 2 Framework. Например, закладка "Associations From" в разделе класса покажет, какие классы используют данный клас и его экземпляры.
В целом, описание класса Flex API в версии от TCOZ может быть разбито на такие разделы:
* Attributes -- свойства класса. * Operations -- методы. * Associations To -- исходящие ссылки из данного класса на другие классы. * Associations From -- входящие зависимости других классов от данного. * Tagged Values -- мета-информация для данного класса. * Other Links -- зависимости, не вошедшие в предыдущие категории.
Есть там и сгенеренные тем же Enterprise Architect графические диаграммы взаимосвязей Flex 2 Framework (этот метод использовался также для создания постера с Flex 2 API Visual Reference).
В общем, куча информации, не отрендеренной в официальном Flex 2 API.
Update: 16 декабря 2007 г. вышел первый официальный релиз haxeVideo 1.0.
Николя Канасье добавил в haXe FLV Video Streaming Multithread Server поддержку записи с веб-камеры и микрофона, улучшил поддержку FLV и AMF, построил лучшее тестовое приложение и выпустил следующий бета-релиз: haXe Video Server Beta 2.
Размер димтрибутива составляет 7 мегабайт, из которых 7 мегабайт -- размер тестового видео, идущего в составе дистрибутива. Нет, я не опечатался. Если быть точным, общий размер всех исходников haXe Video сервера -- 131 Кб. Да, совсем несерьезный парень этот Николя Канасье.
Чтобы потестить:
- запускаем server.bat - открываем video.swf - кликаем на "Record Cam" - поем, танцуем перед камерой, приводим девок - нажимаем Stop - нажимаем "Play Rec. Video" - видим все безобразие записанным, думаем, как теперь избавиться от улик.
Cо времени haXe Video Beta 1 прошло 2 дня. Кстати, некоторые считали, что Канасье шутит.
Вот здесь написано, как получить поддержку Flex 2 в IntelliJ IDEA, -- самом умном редакторе кода из известных в видимой части вселенной.
Хотите?
Когда мы попытаемся произвести такую простую операцию, как добавление экземпляра класса Sprite во Флекс-приложение, -- нечто вроде myCanvas.addChild(new Sprite()); -- флекс ругнется и скажет нам, что добавлять можно только классы, реализующие интерфейс IUIComponent.
Sprite
myCanvas.addChild(new Sprite());
IUIComponent
Это потому, что все визуальные компоненты фрэймворка Fleх этот интерфейс реализуют и работают только с аналогичными реализаторами. Такая вот замкнутая система. Как же нам втиснуться со своим скромным спрайтом в эту громаду событийно-заскинованного великолепия? Ведь Sprite как класс не реализует интерфейс IUIComponent.
Значит, нам нужен тот, кто его реализует. Здесь открывается множество путей, один из которых -- создать класс, расширяющий класс Sprite и реализующий этот самый интерфейс IUIComponent -- этот путь называется Путь Великого Наследования, он долгий и утомительный, и мы туда сейчас не пойдем. Нам ведь совсем не хочется реализовывать все 86 методов интерфейса IUIComponent (я мог ошибиться, проверьте) в этот поздний час.
Ведь есть другой путь -- композиция. Это для нашего случая. Мы используем класс, который уже реализует интерфейс IUIComponent. Я выбрал класс, который называется -- о чудо -- UIComponent! Замечательно в нем то, что его метод addChild принимает в качестве аргумента столь нужный нам спрайт.
UIComponent
addChild
Значит мы теперь можем решить проблему женитьбы спрайта с компонентами Flex 2 Framework. Мы скормим свой спрайт экземпляру класса UIComponent c помощью его метода addChild, и сможем пользовться нашим спрайтом, завернутым в эту оболочку.
Я накропал простой класс UISprite, в котором это реализовано (будет обновляться, если в комментариях мне не покажут, что этот путь тупиковый и нужно было чаще ходить на форумы флэшера, чтобы не изобретать велописед):
UISprite
package { import mx.core.UIComponent; import flash.display.Sprite; /** * UISprite class is a wrapper class * for adding Sprites to Flex display list as childs. * * @author Rostislav Siryk * */ public class UISprite extends UIComponent { /** * Sprite to add to display list */ public var mySprite: Sprite; public function UISprite() { // Empty constructor } /** * Adds non-flex display object as child to this UIComponent instance * * @param assetToSet Object to add as child */ public function setAsset(assetToSet: Object): void { mySprite = (new assetToSet()); this.addChild(mySprite); } /** * Optionally sets teh hane of this UIComponent * * @param assetName New name of UIComponent */ public function setName(assetName: String): void { name = assetName; } /** * Overrides UIComponent class width getter * @return Width of the UIComponent as width of this mySprite child * */ override public function get width():Number { return mySprite.width; } /** * Overrides UIComponent class width setter * @param width New width of the UIComponent as width of this mySprite child * */ override public function set width(width:Number):void { mySprite.width = width; } /** * Overrides UIComponent class height getter * @return Height of the UIComponent as height of this mySprite child * */ override public function get height(): Number { return mySprite.height; } /** * Overrides UIComponent class height setter * @param height New height of the UIComponent as height of this mySprite child * */ override public function set height(height: Number):void { mySprite.height = height; } } }
/** * Overrides UIComponent class width getter * @return Width of the UIComponent as width of this mySprite child * */ override public function get width():Number { return mySprite.width; } /** * Overrides UIComponent class width setter * @param width New width of the UIComponent as width of this mySprite child * */ override public function set width(width:Number):void { mySprite.width = width; }
/** * Overrides UIComponent class height getter * @return Height of the UIComponent as height of this mySprite child * */ override public function get height(): Number { return mySprite.height; }
/** * Overrides UIComponent class height setter * @param height New height of the UIComponent as height of this mySprite child * */ override public function set height(height: Number):void { mySprite.height = height; } } }
Пример использования:
var myUISprite = new UISprite(); myUISprite.setSprite(someSprite); myCanvas.addChild(myUISprite);
(можно было обойтись и одной строкой кода, передавая параметр someSprite через конструктор, но я решил поддерживать подход с пустым конструктором, используемый во Flex Framework)
someSprite
Понятно, что это подходит не только для спрайтов, но также и для мувиклипов, и еще для одних замечательных сущностей, о не слишком широко афишируемой жизни которых я попытаюсь рассказать в следующий раз...
Вышел beta-релиз haXe Video -- многопоточного FLV Video Streaming сервера, написанного полностью на универсальном языке haXe. Цель создать небольшой по размеру сервер для обмена аудио- и видео- потоками с высокой производительностью.
Скачать можно c Google Code: haXe FLV Video Streaming Multithread Server Beta 1.
Выпуск этого сервера стал возможен благодаря поддержке команды Red5 и Roberto Saccon, который помог отладить работу с протоколом RTMP.
Daniel Cassidy реализовал поддержку XPath для универсального языка haXe.
Цель -- полная реализация XPath по стандарту W3C. В данной альфа-версии еще есть несколько нуждающихся в доработке моментов, таких, как компиляция в JavaScript, реализация таких XPath-функций, как id(), namespace-uri() и lang(), поддержка пространств имен и еще несколько подмоментов, связанных с деталями реализаци XML в haXe.
Вот -- документация по XPath для haXe.
Читайте также: haXe: установка и создание первого flash-приложения c помощью компилятора haXe
На сайте bombshock.ru можно скачать первый номер Bomb Shock (21Мб). Bomb Shock -- это новый электронный журнал, посвященный технологии Flash. Его девиз -- «Это не просто Flash, это — Bomb Shock!» (многообещающе :). На обложке первого номера -- Сергей Дифлюкс, организатор Russian Flash Awards и не только. В номере -- обзор итогов FWA, статьи, уроки (замечены Nox Noctis и Клишин), эксперименты от Дэна Иванова, краткий экскурс в Old School Flash и еще много чего -- всего около 160 страниц неплохо сверстанного и отрендеренного во флэше материала.
Второй номер Bomb Shock уже готовится к изданию и, если верить показанной обложке, его основной темой будет деятельность Ивана Дембицкого.
Журнал о Флексе на подходе.
Требования обычные: опыт программирования на AS2 и разработки в среде Flash MX, достаточное количество свободного времени (хотя бы несколько часов в день).
Все подробности проекта при личной связи с разработчиком (см. контакты ниже). Проект уже начат, но текущий флешер слишком загружен и не имеет свободного времени для разработки, и желает его передать в "хорошие руки".
Контакты: E-mail: danilishin - сабакка - mail.ru ICQ: 314 995 804
haXe -- это универсальный язык высокого уровня и бесплатный компилятор для него. haXe позволяет создавать приложения для таких платформ, как JavaScript, Flash Player 6-8, Flash Player 9 , Flash Lite (ActionScript 2 и 3) и Neko. Автор этой технологии -- Николя Канасье, разработчик самого быстрого Flash-компилятора MTASC (теперь у вас есть представление о качестве haXe). Подробнее о haXe.
class Test { static function main() { trace("Hello World !"); } }
-swf test.swf -main Test
<html> <head><title>haXe Flash</title></head> <body bgcolor="#dddddd"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" id="haxe" align="middle"> <param name="movie" value="test.swf"/> <param name="allowScriptAccess" value="always" /> <param name="quality" value="high" /> <param name="scale" value="noscale" /> <param name="salign" value="lt" /> <param name="bgcolor" value="#ffffff"/> <embed src="test.swf" bgcolor="#ffffff" width="400" height="300" name="haxe" quality="high" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </body> </html>
Данные инструкции собраны и сведены в одну со страниц haXe Usage, haXe downloads и Getting Started with haXe/Flash.
Желающим продвинуться дальше в использовании haXe рекомендуется последняя ссылка и прочие туториалы, например, haXe для Flash9 как замена ActionScript 3.
Что-то непонятно, нечто не получается? Спрашивайте здесь или в группе почтовой рассылки haXe.
Как вы знаете, Firebug -- лучшее средство для отладки JavaScript кода.
А 25 января 2007 года Николя Канасье (сумасшедший, автор знаменитого MTASC, а теперь и HaXe), дал ссылку на HaXe-исходники для Firebug (см. в std/haxe/Firebug.hx)
Поддерживаются Flash 6-8, Flash9 (Flex) и Javascript:
if( haxe.Firebug.detect() ) haxe.Firebug.redirectTraces();
После этого все непойманные исключения и трэйсы будут отображаться в консоли Firebug.
Совсем древнее: 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