воскресенье, марта 18, 2007

Семейство Flex Explorer

Flex Style Creator - создание css-стилей приложения.
Flex Primitive Explorer - создание графических примитивов.
Flex Filter Explorer - создание графических фильтров.
Flex Transitions and Effects Explorer - эффекты и переходы.

четверг, марта 15, 2007

Flex 2.0 Primitive Explorer

Flex 2.0 Primitive Explorer - простой способ создания графических примитивов (звездочек, треугольников, дуг, секторов и т.п.) Примитивы можно разукрашивать в свое удовольствие. Необходимый код генерируется тут же.

Некоторые тонкости использования E4X

1. Устанавливайте resultFormat="e4x" для HTTPService

По умолчанию, resultFormat для <mx:HTTPService> является "object". Но при получении XML данных, "object" - это не то, что вам нужно. Если же задать "e4x", то lastResult будет являтся XML объектом, который можно парсить с помощью E4X выражений.

2. E4X выражения не ссылаются на самый верхний тег XML

Итак, имеем <mx:HTTPService>, названный myService с resultFormat="e4x", возвращающим следующую структуру:

<?xml version="1.0"?>
<people>
<person>mike</person>
<person>sho</person>
<person>nj</person>
</people>

Эти данные содержатся в myService.lastResult (или в event.result.) Как получить XMLList всех элементов <person>?

Часто думают, что E4X выражения составляют от корневого тега <people>:

var personNodes:XMLList = myService.lastResult.people.person;
// неправильно
А правильно так :
var personNodes:XMLList = myService.lastResult.person;
// правильно

3. Используйте for each, а не for

ECMAScript давно имеет структуру for (ключ в коллекции). Но обратите внимание, что при использовании этого выражения переменной цикла является ключ коллекции, а не значение текущего элемента, поэтому в цикле необходимо писать коллекция[ключ] для ображения к его значению.

E4X добавляет следующую структуру (которую можно использовать на любой коллекции): for each (значение в коллекции). Рассмотрим примеры:

for (var key:* in myService.lastResult.person)  { 

var value:* = myService.lastResult.person[key];
...
}
А теперь for each:
for each (var value:* in myService.lastResult.person)  
{... }


4. Используйте for each (child in parent.*), вместо for each (child in parent)

Итак, есть документ :

var mydocument:XML = 
<root>
<cat>
<mouse />
<mouse />
<mouse />
</cat>
</root>
var cats:XMLList = mydocument.cat; // это только один элемент
Теперь необходимо перебрать всех мышей у этого кота.
Чтобы получить атрибуты объекта ActionScript, можно написать следующее:

var o:Object = ...;  for each (var property:* in o) ...
Вы думаете, что следующим образом вы делаете тоже самое:

for each (var mouse:XML in cats) ... // неправильно

Увы, E4X отличается. В E4X, "cats" - это коллекция -- список узлов <cat>, а в примере есть только один <cat>.

Поэтому, чтобы перебрать всех мышей необходимо использовать следующую структуру:

// перебрать все прямые дочерние элементы
for each (var mouse:XML in cats.*) { ... }
// или перебрать всех прямых потомков, которые являются узлами <mouse>
for each (var mouse:XML in cats.mouse) { ... }

5. E4X специально стирает различия между XML и XMLList

При изучении E4X, вы узнаете, что есть два типа данных: XML и XMLList. Вроде легко, но потом появляются проблемы с неправильной типизацией данных.
var mydocument = 
<root>
<rabbit name="Brownster Johansson McGee" />
</root>;
// 'mydocument.rabbit' - список всех узлов <rabbit>, значит
// myPetRabbit должен быть XMLList? Но я назвал переменную
// 'myPetRabbit', а не 'myPetRabbits',
// потому что я знаю, что заяц только один.
var myPetRabbit:XMLList = mydocument.rabbit;
// Как же его зовут? Почему следующее выражение не вызывает ошибки,
//ведь myPetRabbit - это XMLList?
trace(myPetRabbit.@name);

Причина в том, что E4X намеренно стирает различия между XML и XMLList. Каждый XMLList, который содержит один элемент, будет рассматриваться как XML. (Если 'myPetRabbit' будет содержать несколько узлов, то myPetRabbit.@name будет возвращать список всех атрибутов "name" все узлов <rabbit>.)

Например, рассмотрим документацию по методу XMLList.toString():

  • Если объект XML имеет простую структуру, то метод toString() возвращает содержимое узлов без тегов, атрибутов, пространств имен и т.п.

  • Если объект XML имеет сложную структуру, то метод toString() возвращает все содержимое, вклюяая теги, атрибуты и т.п.

То есть если XMLList содержит <node>hello</node>, то toString() вернет "hello"; но если он содержит <node>hello</node><node>goodbye</node>, toString() вернет "<node>hello</node><node>goodbye</node>" (а не "hellogoodbye"). Если же вам всегда нужен полный XML, используйте toXMLString() вместо of toString().

6. Внимание! Простое выражение может вам дорого обойтись

При использовании простых объектов нет ничего удивительного в использовании следующего кода:

var x:Object = ...;  
if (x.y.z == 3)
foo(x.y.z);

Код работает быстро, проблем не вознкает.

Но в E4X операция типа "x.y.z" будет означать, что цикл проходит через всю XML-структуру и ищет соответствующие совпадения:

var mydocument:XML = ...;  
if (mydocument.cat.mouse.length() == 3)
{foo(mydocument.cat.mouse)};

Итак, если вам потом понадобиться использовать результат, то лучше сохранить его в XMLLis переменнойt:

var mydocument:XML = ...;  
var mice:XMLList = mydocument.cat.mouse;
if (mice.length() == 3)
{foo(mice);}

7. Используйте дебаггер


Отладчик поможет вам разобраться в значениях XML и XMLList переменных.

XML variables


Отсюда

среда, марта 07, 2007

Презентация Papervision

Те, кого интересует движок Papervision, могут скачать презентацию (40 мб, говорят, там есть исходники psd, 3d max, papervision, я не качал). В конце, наверное, получится это чудо.

Взял отсюда.

FlexBook

Эли Гринфилд нафигачил кучу примеров по использованию книжного движка во флексе.

вторник, марта 06, 2007

ActionScript 2.0 - 3.0 Migration Cheatsheet

Опубликован ActionScript 2.0 - 3.0 Migration Cheatsheet, содержащий всю необходимую информацию по переходу на AS 3.

понедельник, марта 05, 2007

четверг, марта 01, 2007

Easing-эффекты в одном месте

Джеймс Ворд выложил примерчик, демонстрирующий все типы Easing-эффектов во Flex.

FlexLib на Google Code

Doug McCune, Ted Patrick, Mike Chambers и Darron Schall анонсируют библиотеку полезных компонентов Flexlib. Вот их список с примерами.

суббота, февраля 17, 2007

Примеры движка Papervision3D

Увидел еще несколько примеров, созданных на движке Papervision3D.


2007.jpg panorama.jpg


paperPlanet.jpg bumpmapRhino.jpg



Может для заядлых 3D-шников это ерунда, но меня впечатлило!

среда, февраля 14, 2007

Как раскрасить ряды DataGrid в зависимости от данных?

А вот так!

Adobe Flex Coding Guidelines

Некто Fabio Terracini совместно с DClick написали гайдланы для написания as и mxml кода. Привели в порядок в общем.

Flex Style Explorer 2.01

Вышел Flex Style Explorer 2.01. Из новых фич анонсируют следующие:

1) Навороченный ColorPicker (эх, Василий, не видели они вашего)
2) Экспорт всего CSS
3) Поддержка StyleName
4) Стили форматирования текста
5) Возможность введения значения руками и слайдером
6) Добавлены ToggleButtonBar, HDividedBox, VDividedBox, TextArea, VRule, VSlider, ColorPicker, ToolTip
7) Улучшенная навигация
8) Индикация отредактированных компонентов
9) Работа с прозрачным приложением
10) Улучшение UI

среда, февраля 07, 2007

Прикольный скин - мятые салфетки

Наткнулся на прикольный скин, имитирующий мятые салфетки.

.

У автора пока весь блог этим салфеткам посвящен:)

четверг, января 25, 2007

Макросы в html-темплейтах флекс-проекта

${project}
Название проекта, MyProject.

${application}
Имя приложения, MyApp.

${version_major}
Major-версия плеера, т.е. 9 для 9.0 r28.

${version_minor}
Minor-версия, т.е. 0 для 9.0 r28.

${version_revision}
revision-версия, т.е. 28 для 9.0 r28.

${build_suffix}
Суффикс, определяющий тип версии приложения, "-debug" - для отладочной версии и "" - для релиза.

${swf}
Имя SWF файла без расширения .swf. Эквивалентно ${application}${build_suffix}.

${bgcolor}
Фон приложения, заданный в атрибуте backgroundColor тега <mx:Application> или в поле метаданных backgroundColor в [SWF] metadata атрибуте [SWF(backgroundColor="#ffffff")] public class MyApp extends Sprite.

${width} и ${height}
Ширина и высота приложения, заданная в <mx:Application> или в метаданных [SWF(width="300", height="400")] public class MyApp extends Sprite.

${title}
заголовок приложения, заданный в атрибуте pageTitle тега <mx:Application> или в [SWF(pageTitle="flex r00lz")] public class MyApp extends Sprite.

Отсюда

среда, января 24, 2007

Flex2LocalDebugger - трейс-панель во флексе

Flex2LocalDebugger - это некоторое подобие легкой отладки флекс-приложений. Например, при вызове
LocalDebugger.show('test'); вылетает окошко Alert с надписью test.

А LocalDebugger.trace('test'); заносит информацию в окно отладки. Flex2LocalDebugger работает через LocalConnection, поэтому для правильной работы функции trace необходимо запустить файлик Flex2LocalDebuggerConsole.html, который идет в архиве. В нем и будут отображаться все ваши трейсы.

PageFlip во флеше и флексе

На ByteArray.org можно скачать базовый класс переворачивания страниц. А тем временем, в Нидерландах создали с его помощью маленькое флекс-приложение PageFlip.

среда, января 17, 2007

felxoBooth - сервис для эксбиционистов

Полушуточный сервис - felxoBooth - наложи на себя фильтр и покажись другим:)

пятница, января 12, 2007

Альтернатива FMS - Wowza Media Server

Вышла вторая бета Wowza Media Server (WMS). WMS - RTMP сервер для передачи потокового видео, аудио и данных от и к Flash-плееру. WMS может быть размещен на любой платформе, поддерживающей Java 5. На официальном сайте проекта текущая версия доступна для скачивания (после регистрации). В комплекте установки идут примеры проигрывания потокового видео, видеочата, использования Remote Shared Objects, записи видео и др.

О цене WMS будет объявлено позже.

четверг, января 11, 2007

Несколько заметок про Date

Как известно, конструктор Date может принимать значения года, месяца (0-11), дня (1-31) и т.п. Но можно немножко поиграть с параметрами и получить интересные результаты.

Например, если задать в качестве месяца -1, то из даты будет вычтен месяц:

var dt:Date = new Date( 2006, -1, 1 );
// Thu Dec 1 00:00:00 GMT+0300 2005


Теперь попытаемся создать 0 января 2006 года:

dt = new Date( 2006, 0, 0 );

Получим 31 декабря 2005 года.

0 марта не существует, поэтому получаем 29 февраля (2008 год будет високосным):

dt = new Date( 2008, 2, 0 );

Теперь вычтем из текущей даты неделю:

dt = new Date();
dt.date = dt.date - 7;


Получим Thu Jan 4 2006.

Вот такая математика:)

С прошедшими праздниками всех!