понедельник, декабря 31, 2007

Всех с Новым годом!

Дорогие друзья! Поздравляю всех вас с наступающим праздником, желаю, чтобы все ваши мечты сбылись, планы реализовались, а счастье и удача не покидала вас!

среда, декабря 26, 2007

Tree vertical-scroll баг

Столкнулся с такой проблемой.
При открытии нода дерева с сервера приходят данные об его дочерних элементах, изменяется этот узел датапровайдера, дети отображаются. Все вроде бы ничего, но если по высоте элементы не влезают в дерево, вертикальный скроллинг появляется только после повторного открытия нода (когда он уже знает о своих детях).
Решение - использовать кастомный dataDescriptor. Нашел в блоге Joan Lafferty здесь.

Бажное приложение:
treeScrollAuto.mxml
treeScrollAuto.swf
Решение:
treeScrollAutoFixed.mxml
myDescriptor.as
treeScrollAutoFixed.swf

среда, декабря 05, 2007

Девайс от Nokia с девятым флеш-плеером

На днях мне подсказали, что у Nokia вышла усовершентсвованная версия интернет-планшета N810, подробную спецификацию которого можно посмотреть на странице продукта. Скажу лишь, что там есть мозилла-подобный браузер, поддерживающий вебстандарты и AJAX и Adobe® Flash® 9 плагин с поддержкой потокового видео и аудио. Данный аппарат является последователем N800, который также имеет девятый плеер и, в отличии от новой модели, уже продается в России по цене от 15 до 18 тысяч рублей.

Скринкаст Papevision3D 2.0

Ralph Hauwert разместил у себя скринкаст (8 Мб), в котором показаны основы работы с Papevision3D второй версии на примере создания небольшого приложения с вращающимися сферами(исходники).

пятница, ноября 23, 2007

Онлайн-сервис для трассировки изображений в вектор

VectorMagic - новый сервис, позволяющий загрузить картинку, сконвертировать ее в вектор и сохранить результат в eps, svg или png.

вторник, ноября 13, 2007

Новый Flex - новые чарт-компоненты

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

четверг, ноября 01, 2007

Flare visualization toolkit

Flare - это коллекция ActionScript 3 классов для создания разнообразных интерактивных визуализаций, например, при создании графиков, сложных анимаций, диаграмм и т.п. Flare основан на prefuse, богатом инструменте для визуализаций, написанном на Java. Flare является опенсорсным (BSD) и может спокойно использоваться для коммерческих целей.
Скачать
Демо
Урок
API докуметация

понедельник, октября 29, 2007

AIR SQLite Admin от Коэнратса

Кристоф Коэнратс обновил свое приложение по администрированию SQLLite. Вы сможете создавать и удалять базы, выполнять различные запросы. Приложение кэширует все запросы в специальном файле sqladmincache.db, использует синхронные операции с БД и schema API для вывода информации о таблицах вашей базы.

Mozilla представляет Prizm - симбиоз веба и десктопа

На днях Mozilla Labs анонсировала новый проект Prizm (бывший WebRunner)


Как говорят разработчики, это не новая платформа, а просто полезное совмещение декстопных приложений, построенный с помощью XUL (XML User Interface Language) и современных веб-технологий. Если вкратце - Prizm позволяет добавлять ваши любимые веб-приложения на десктоп и запускать их оттуда.


Новость интересная. Даже адобы в комментах начали к словам придираться. Пойду качать и разбираться.

UPDATE: Вот более подробная инфа.

вторник, октября 23, 2007

Экспорт из DataGrid в Excel через буфер

Немного переделал функцию по экспорту данных из dataProvider'а DataGrid в Excel. В качестве источника данных выступает ArrayCollection.

private function exportToExcel(dg:DataGrid, fields:Array):void
{
var dp:ArrayCollection = dg.dataProvider as ArrayCollection;
if (dg == null || dp==null || dp.length==0 || fields == null || fields.length==0) {
Alert.show("Ошибка экспорта.");
return;
}
var i:int;
var j:int;
var l_dp:int = dp.length;
var l_f:int = fields.length;
var result:String = "";
for (i=0; i<l_f; i++)
{
result += fields[i][1];
if (i!=(l_f-1)) result+='\t';
}
result +='\r\n';
for (i=0; i<l_dp; i++)
{
for (j=0; j<l_f; j++)
{
var prop:String = fields[j][0];
var l_col:int = dg.columns.length;
var k:int;
for (k=0; k<l_col; k++)
{
if (prop == dg.columns[k].dataField)
{
break;
}
}
var f:Function = dg.columns[k].labelFunction;
if (f != null)
{
result += f(dp[i], dg.columns[k]);
}
else result += dp[i][prop];
if (j!=(l_f-1)) result+='\t';
}
result +='\r\n';
}
System.setClipboard(result);
}

Вызываем так:

exportToExcel(grd,
[['title','Заголовок'], ['rank','Рейтинг'],
['views', 'Просмотров'],['comp', 'Конкурсы'],
['access', 'Доступность'], ['pics','Количество изоб-й']])
,

grd - id нашего DataGrid, а делее идет массив с dataField и заголовками колонок.
При экспорте также учитывается labelFunction. После выполнения функции данные можно смело вставлять в таблицу Excel.

Свежие видео-уроки от GotoAndLearn.com

Я не знаю, в курсе вы или нет, но существует замечательный ресурс GotoAndLearn.com с интересными видео-уроками от Lee Brimelow. На сайте представлено порядка 40 туториалов начиная с 7 версии и до Flash CS3 и AIR приложений. Из свежих:
- Вебкамеры, PNG и AIR
- Использование Document Class
- Drag and Drop в AIR
- Разработка AIR во Flash
- Основы Papervision3D

Все уроки подробные и понятные. Язык не обязателен - каждый шаг показан на видео, вплоть до того, как автор набивает код и исправляет ошибки:)

вторник, октября 16, 2007

Случайная ошибка flash.accessibility

Недавно, я случайно при настройке проекта выбрал галочку Generate accessible SWF file. Потом после каждого вызова Alert у меня вываливалась ошибка:
TypeError: Error #2007: Parameter source must be non-null.
at flash.accessibility::Accessibility$/sendEvent()

Случайную галочку пришлось снять:)

среда, октября 10, 2007

SWFObject 2.0 или правильное внедрение Flash на HTML страницу

Скоро выйдет сие чудо второй версии (пока можно скачать третью бету). А покамест я решил перевести статью-документацию по его использованию. Говорят, скоро это будет стандартом Adobe. Кого ломает читать на блоггере (длинные строки кода обрезаются), могут зайти на народ

Как внедрить Flash контент с помощью совместимой со стандартами html-разметки? (1 способ)

ШАГ 1: Внедрение Flash контента и альтернативного контента с помощью совместимой со стандартами html-разметки

SWFObject использует в качестве разметки метод вложенных тегов object с условными комментариями, поддерживаемыми Internet Explorer [http://www.alistapart.com/articles/flashembedcagematch/] , чтобы обеспечить наиболее оптимальную кросс-браузерную поддержку, совместимость со стандартами и наличие альтернативного контента [http://www.swffix.org/testsuite/]:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 - step 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<div>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
<param name="movie" value="myContent.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
<!--<![endif]-->
<p>Alternative content</p>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>

</div>
</body>
</html>

Заметка 1: Метод вложенных тегов object требует двойное их определение(внешний тег для Internet Explorer и внутренний для остальных браузеров), таким образом задавать все атрибуты и параметры необходимо дважды.

Заметка 2: Атрибуты id, classid, элемент param с movie используются для внешнего object. Атрибуты type и data используются только для внутреннего.

Заметка 3: Мы не рекомендуем использовать атрибут codebase для задания пути к установщику Flash плагина с серверов Adobe, потому что это запрещено согласно спецификации, которая ограничивает его доступ доменом текущего документа. Вместо этого мы предлагаем использовать альтернативный контент с сообщением о возможности загрузки плагина и соответствующей ссылкой.

Как можно использовать HTML для конфиграции Flash контента?

Можно задать следующие атрибуты [http://www.w3schools.com/tags/tag_object.asp] элементу object:

  • id
  • name
  • class
  • align

Можно задать следующие элементы param [http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701]:

Почему необходимо использовать альтернативный контент?

Элемент object позволяет размещать альтернатиный контент, который будет показан, если Flash плеер не установлен или не поддерживается. Этот контент также виден для поисковых машин, что немаловажно для SEO.

Недостатки использования метода вложенных объектов?

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

  • Safari 1.2.2 и ниже игнорирует все вложенныеэлемены param
  • Internet Explorer 6+ под Windows XP SP2+ и Opera 9+ будут использовать механизм активации Flash контента по клику.
  • Присутствует риск некорректного отображения (или неотображения вовсе) Flash контента в плеере версии ниже необходимой

Библиотека SWFObject старается решить эти проблемы.

 

ШАГ 2: Внедрение библиотеки SWFObject в HTML страницу

Библиотека SWFObject состоит из внешнего JavaScript файла (размер: 9.8Kb, GZIPed: 3.3Kb).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 - step 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript" src="swfobject.js"></script>

</head>
<body>
<div>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
<param name="movie" value="myContent.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
<!--<![endif]-->
<p>Alternative content</p>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>

ШАГ 3: Конфигурация Flash контента через библиотеку SWFObject

Сначала необходимо задайть уникальный id внешнего тегу object. Затем добавьте метод swfobject.registerObject:

  1. Первый аргумент (String, необходим) - это id объекта, заданный ранее.
  2. Второй аргумент (String, необходим) определяет версию Flash плеера, под которую опубликован ваш ролик. SWFObject смотрит только на первые три цифры версии, например, "9.0.18".
  3. Третий аргумент (String, опциональный) может быть использован для активации экспресс-установки плеера [http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75] и задает адрес swf-файла экспресс-установки. Данный файл включен в библиотеку SWFObject.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 - step 3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>

<script type="text/javascript">
swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");
</script>

</head>
<body>
<div>

<object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">

<param name="movie" value="myContent.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
<!--<![endif]-->
<p>Alternative content</p>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>

Как внедрить несколько SWF файлов с помощью первого способа?

Просто повторите шаги 1 и 3 предыдущего радела.

Как ссылаться на активный элемент object с помощью JavaScript (используя первый способ)?

Одним из сторонних эффектов использования метода вложенных объектов является то, что на один SWF существуют два элемента object, но задавать можно только один уникальный атрибут id или name.

Разные браузеры указывают на разные элементы object:

  • Internet Explorer на Windows видит только внешний object, так как внутренний закоментирован для него.
  • Opera и Safari поддерживают нотацию внутреннего object [http://www.swffix.org/testsuite/], ряд: object ActiveX)
  • Firefox, Mozilla and all other Gecko based browsers use the inner object

На активный объект можно сослаться через:

  1. Атрибут id или name внешнего тега
  2. С помощью следующего javascript-кода:
var obj = document.getElementById("myId");
var nestedObj = obj.getElementsByTagName("object")[0];
var ref = false;
if (obj) {
if (!nestedObj || (nestedObj && typeof obj.SetVariable != "undefined")) {
ref = obj;
}
else if (typeof nestedObj.SetVariable != "undefined") {
ref = nestedObj;
}
}
if (ref) {
ref.doSomething(); // например, вызов external interface
}

Как с помощью SWFObject динамически внедрять Flash контент? (второй способ)

ШАГ 1: Создание алтернативного контента с помощью стандартной html-разметки

Метод динамического внедрения следует принципу постепенного улучшения[http://www.adobe.com/devnet/flash/articles/progressive_enhancement.html] и замещает альтернативный HTML контент Flash контентов, если JavaScript и Flash плагины поддержтваются. Сперва создайте альтернативный контент с уникальным id:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 dynamic embed - step 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<div id="myContent">
<p>Alternative content</p>
</div>

</body>
</html>

ШАГ 2: Внедрение библиотеки SWFObject в HTML страницу

Библиотека SWFObject состоит из внешнего JavaScript файла (размер: 9.8Kb, GZIPed: 3.3Kb).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 dynamic embed - step 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript" src="swfobject.js"></script>

</head>
<body>
<div id="myContent">
<p>Alternative content</p>
</div>
</body>
</html>

ШАГ 3: Внедрение SWF с помощью JavaScript

swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes) has five required and four optional arguments:

  1. swfUrl (String, необходим) - URL SWF файла
  2. id (String, необходим) - id HTML элемента, содержащего альтернативный контент, который будет замещен Flash контентом
  3. width (String, необходим) - ширина SWF файла
  4. height (String, необходим) - высота SWF файла
  5. version (String, необходим) - версия публикации SWF файла
  6. expressInstallSwfurl (String, опцианален) - адрес файла экспресс-установки необходимой версии [http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75]
  7. flashvars (Object, опцианален) - переменные flashvars в виде name:value пар
  8. params (Object, опцианален) - параметры вложенного элемента object в виде name:value пар
  9. attributes (Object, опцианален) - атрибуты object в виде name:value пар
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 dynamic embed - step 3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>

<script type="text/javascript">
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");
</script>

</head>
<body>
<div id="myContent">
<p>Alternative content</p>
</div>
</body>
</html>

Конфигурация Flash контента

Можно задать следующие атрибуты [http://www.w3schools.com/tags/tag_object.asp] элементу object:

  • id
  • name
  • class
  • align

Можно задать следующие элементы param [http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701]:

Как с помощью объектов JavaScript задавать flashvars, params и атрибуты object?

Создаем соответствующие объекты:

<script type="text/javascript">

var flashvars = {};
var params = {};
var attributes = {};

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script>

Добавляем пары name:value:

<script type="text/javascript">

var flashvars = {
name1: "hello",
name2: "world",
name3: "foobar"
};
var params = {
menu: "false"
};
var attributes = {
id: "myDynamicContent",
name: "myDynamicContent"
};

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script>

Или с помощью точечной нотации:

<script type="text/javascript">

var flashvars = {};
flashvars.name1 = "hello";
flashvars.name2 = "world";
flashvars.name3 = "foobar";

var params = {};
params.menu = "false";

var attributes = {};
attributes.id = "myDynamicContent";
attributes.name = "myDynamicContent";

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script>

Или для однострочников:

<script type="text/javascript">

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"myDynamicContent",name:"myDynamicContent"});

</script>

Если вы не хотите использовать аргумент задайте ему значение 'null' или сотавьте пустой объект:

<script type="text/javascript">

var flashvars = null;
var params = {};
var attributes = {
id: "myDynamicContent",
name: "myDynamicContent"
};

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script>

Объект flashvars можно задать внутри params:

<script type="text/javascript">

var flashvars = null;
var params = {
menu: "false",
flashvars: "name1=hello&name2=world&name3=foobar"
};
var attributes = {
id: "myDynamicContent",
name: "myDynamicContent"
};

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script>

Как внедрить несколько SWF файлов с помощью второго способа?

Просто повторите шаги 1 и 3 предыдущего радела.

Как с помощью SWFObject получить информацию о Flash плеере через JavaScript?

 

swfobject.getFlashPlayerVersion() - возвращает JavaScript объект, содержащий версию (major:Number), (minor:Number), (release:Number) установленного плеера:

var playerVersion = swfobject.getFlashPlayerVersion();
var majorVersion = playerVersion.major;

swfobject.hasFlashPlayerVersion(versionNumbersString) - возвращает Boolean, показывающий установлена или нет сооветствующая версия:

if (swfobject.hasFlashPlayerVersion("9.0.18")) {
// есть
}
else {
// нет
}

 

Риски использования SWFObject?

Первый способ

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

 

Второй способ

Пользователи, у которых выключен или не поддерживается в браузерах JavaScript, увидят альтернативный контент.

Поддерживает ли SWFObject MIME тип application/xhtml+xml?

Нет.

понедельник, октября 08, 2007

Полезные плагины для FlashDevelop

Alessandro Crugnola рассказывает про свой новый плагин SharedObject Reader для FlashDevelop 3. Остальные полезные плагины можно найти на Google Code. Там представлены:
  • BookmarkPanel
  • AsClassWizard
  • FlashApi
  • SourceOptions
  • StickiesNotes
  • CodeReformatter
  • RegularExpressionPanel
  • SharedObjectReader

Кстати, устанавливать плагины нужно в папку userdir\Local Settings\Application Data\FlashDevelop. Но не торопитесь свалить все сразу. Лучше по одному, потому что я словил 3 ошибки на запуске (но все пашет) и сейчас не могу понять, кто в этом виноват:)

понедельник, октября 01, 2007

Adobe представляет Flash Player 10 "Astro"

На MAX 2007 Adobe анонсировала Flash Player 10 под кодовым именем Astro:
Вот что обещают:

1. Улучшенная работа с текстом

2. "Hydra" - язык написания собственных Bitmap-фильтров.

3. Поддержка 3D. Как говорят очевидцы - разочаровало. Позволяет искажать битмапы в перспективе. 3D теперь software based. Появляются новые свойства типа rotationX, rotationY и rotationZ. В качестве примера было показано видео, которое проигрывалось на плоскости, по которой можно было кликать мышкой. Значит, 3D hardware support для десятки не будет.

Прямо из Чикаго (говорят, дождь идет)

пятница, сентября 28, 2007

Имитатция trace во Adobe Flex

Последнее время появилось несколько полезных утилит, позволяющих потрейсить ваши приложения не прибегая к debug-режиму компиляции. Например, один от Алексея Аникутина и другой от ShaggySmile.
Первый тип неудобен для меня, так как он сделан для Mozilla Firefox, а я привык запускать приложения в осле. А второй подразумевает сперва запуск флешки-приемщика сообщений. И еще - мне не нужны всякие навороты типа табличных данных - мне просто нужен вывод текстовых сообщений, ну там массив протрейсить или строчку какую-нибудь вывести. Без обид, ребят:)

Поэтому, я для себя сделал маленький наворот для html-темплейта приложения. Открываем темплейт, добавляем следующий код сразу после body:

<!--logger-->
<input type="button" onclick="toogleVis()" value="show/hide"/>
<input type="button" onclick="clearLog()" value="clear"/>
<div id="log" style="display:block;">
<script language="JavaScript" type="text/javascript">

function setLog(val)
{
var objDiv = document.getElementById("txt_log");
objDiv.scrollTop = objDiv.scrollHeight;
objDiv.value +=val + "\n";
}

function toogleVis()
{
var objDiv = document.getElementById("log");
objDiv.style.display=(objDiv.style.display=="block")?"none":"block";

}

function clearLog()
{
document.getElementById("txt_log").value="";
}

</script>
<textarea style="width:100%; height:150px;" id="txt_log"></textarea>
</div>
<!--logger-->

На body вешаем обработчик onload="clearLog()".

Теперь в нашем флекс-проекте добавим маленькую функцию:

public function strace(val:*):void
{
var str:String = val.toString();
ExternalInterface.call("setLog", str);
}

Теперь после компиляции проекта и открытии его в браузере, наверху появляется текстовое поле, в которое можно выводить свои трейсы:

strace("Hello world :)");

четверг, сентября 27, 2007

Вышла версия 3D движка Sandy для AS3

Основными особенностями движка являются:
  • совместимость от 7 до 9 версий плеера
  • несколько 3D примитивов, позволяющих быстро создавать необходимые объекты без особых трехмерных знаний.
  • улучшенное и простое управление объектами, позволяющее без труда их масштабировать, вращать, двигать и т.п.
  • улучшенное управление камерой.
  • загрузка сложных объектов (.ASE, Collada, 3DS)
  • система материалов для управления внешним видом моделей
  • использование Flash-фильтров для создания приятных эффектов

Сайт проекта. Вот демки, отсюда можно скачать.

среда, сентября 26, 2007

Тонкости addFrameScript

Существует недокументированная функция addFrameScript, которая может быть иногда полезна. Она позволяет задать функцию, которая будет вызываться при прохождении мувиклипом соответствующего кадра. Эта функция является отличной альтернативой коду в кадрах.

Вот ее синтаксис:
MovieClip.addFrameScript(frame_number:uint,function_to_call:Function)

Пример:

function myFunction()
{
trace('10th frame')
}

addFrameScript(9, myFunction); // кадры нумеруются с 0


Осталось только научится передавать параметры в эту функцию. Тут нам поможет класс Delegate от Ian Thomas.

package
{

public class Delegate
{
public static function create(handler:Function,...args):Function
{
return function(...innerArgs):void
{
handler.apply(this,innerArgs.concat(args));
}
}
}
}


Теперь мы можем вызывать нашу функцию с параметрами:

package {

import flash.display.*;

public class main extends Sprite {


public function main() {
for (var i:int=0; i<10; i++) {
var mc:MovieClip = new Quad() as MovieClip;
addChild(mc);
mc.addFrameScript(mc.totalFrames-1,Delegate.create(myFunction,i));
}
}

private function myFunction(i:int):void {
trace(i);
}
}
}


Оригинал

Кстати, Денис Коляко недавно ниписал класс ClipFactory.

Класс ClipFactory позволит вам создавать обычный мувиклип с указанным количеством пустых кадров, который вы в последствии сможете использовать в качестве анимационного клипа, выполняя действия в каждом кадре (навесив обработчики через метод addFrameScript).

четверг, сентября 20, 2007

HTML во Flex - теперь еще проще!

Alistair Rutherford расширил созданный когда-то Кристофом Коэнратсом компонент для отображения HTML во Flex через IFrame. Использовать его достаточно просто, поддерживаеся несколько HTML окон, видимость контролируется автоматически. В общем - исходники, пример, почитать.