Author Archive



26
Янв

Flex swf внутри pure AS3 проекта. Или как поженить flex и flash cs5.

В текущем проекте возникла необходимость вставить флекс swf внутрь проекта созданного во Flash IDE. Мало того, мне потребовалось, чтобы флекс ролик подгружаемый внутрь основной флешки самостоятельно адаптировался к размерам экрана и реагировал на изменение окна браузера вместе с остальными компонентами.

Ситуация эта возникла в первую очередь по банальной лени. Кусок интерфейса в этом модуле носит типовой флексовый характер - скроллбары, списки, кнопки, только не стандартные а а специально задизайненные дизайнерским дизайнером… Во Flash Catalyst такой интерфейс из исходника в иллюстраторе сооружается за 20 минут. Дальше дело техники - дописать чуть чуть кода и модуль готов. Очень уж не хотелось в рукопашную прописывать все эти интерфейсные элементы.

Сам по себе ролик подгружается в основной проект без проблем, но с тем, чтобы получить доступ к публичной функции флексового ролика - onResize() - пришлось повозится. Но, как говорится google в помощь и спустя пару часов я откопал решение.

На помощь пришло магическое заклинание:

(loader.content as MovieClip).application.onResize();

Оказывается после волшебного (loader.content as MovieClip). можно писать все что угодно - компилятор, как говорится, схавает! Главное, чтобы вы знали что пишете.

Внутри поля application хранится ссылка на… инстанс основного апликейшена флексового ролика. Соответственно можно получить и доступ ко всем его публичным переменным и методам. Т.е. все те функции, что прописаны public внутри основного mxml flex проекта - будут доступны. И это отлично работает!

fl_plus_fb

P.S. На обозначенный в заглавии вопрос в интернетах в основном отвечают так: “это никому не нужно” или “весь проект надо делать во флексе”.  Может быть, может быть. Однако флекс для моего текущего проекта слишком громоздкая штука,  с массой совершенно ненужных мне деталей. Достаточно сказать, что упомянутый выше флексовый кусок проекта в скомпилированном виде вместе со всеми своими бубенцами и примочками весит раз в пять больше моего основного файла swf. Т.е. экономия времени в данном случае оборачивается увеличением размера загружаемого модуля. Тем не менее это был интересный опыт. В случаях когда важна скорость разработки такой способ может помочь.

20
Янв

Flash-console логгер/дебаггер - швейцарский нож разработчика

Обнаружил на ruFlash интересную утилиту Flash-console логгер/дебаггер. Надо будет протестировать. console_controls

Обычно я пользуюсь либо традиционным трейсом, во flash IDE и SWFProfiler для отображения информации о состоянии памяти и framerate, либо встроенным дебаггером той же flash IDE. Очень спартанский набор, да.

Однако с переходом на 64-bit windows7 начались постоянные проблемы с дебаг-версией flash плеера - постоянно вешает мне файрфокс. Это очень, очень раздражает. Тут как раз может такая утилитка пригодится, т.к. она не требует этой дебаг версии.

Интерфейс этой штуки конечно не назовешь удобным и понятным, но это не главное. Посмотрим, как она покажет себя в деле.

На вскидку несколько возможностей flash-console, которые меня приятно удивили:

  • просмотр дерева объектов под курсором мыши
  • экранная линейка с увеличенным просмотром
  • графический мониторинг памяти + fps
  • принудительный запуск гарбадж-коллектора
  • инспектор объектов! Да, блин, можно посмотреть поля и методы объекта и текущие значения переменных!
  • несколько каналов трейсинга - очень актуально, у меня иногда output трейса так забивается мессагами, что я иногда неделю не могу найти из какого места в коде этот спам у меня генерится, а тут фильтровать можно.

P.S. попробовал лично. Просто офигенная штука! Меня впечатлила примочка - показывающая полностью все объекты находящиеся по курсором в виде дерева. Мне лично это помогло обнаружить, что некоторые негодяйские мувиклипы вовсе не удалялись со сцены, как я полагал, а висели там с нулевой прозрачностью и захламляли память. Так что штука мегаполезная. Однозначно рекомендую!

23
Авг
Comments Off

iphone и flash. Жизнь на яблоке.

Вот уже месяц я интенсивно использую iPhone 3G по полной программе. В том числе и для веб-серфинга.
И вот что я хочу сказать: отсутствие поддержкм flash мне совсем не мешает, более того, меня это просто не волнует.

Как впрочем, совершенно не волновало и раньше, когда я пользовался Nokia n800 с поддержкой флэша. На нокии я мог открыть практически любой флэш-сайт, однако осмысленно использовать его было просто невозможно.
Производительность. Да все дело в производительности. Даже довольно простые флэш-сайты еле ворочались на n800. Я убедился, что флэш номинально поддерживатся и спокойно забыл об этом. По существу смысла в такой поддержке ноль целых ноль десятых.
Ровно по этой причине меня ни минуты не смущало отсутствие поддержки flash на iPhone. Он тут просто не нужен!
Да. Давайте смотреть правде в глаза, на таком маленьком устройстве флэш - совершенно избыточная побрякушка не дающая ровным счетом ничего кроме удовлетворения от самого факта ее наличия.
Флэш-сайты надо смотреть на хорошем компьютере с большим монитором, а не на несчастных 320 пикселях ширины крошечного экрана айфона. На айфоне, как ни удивительно, есть куда более удобные способы читать всякие сайты, очень многие сетевые издания и ресурсы создают специальные приложения в которых в удобном для такого размера экрана виде показывается содержимое сайта. Вот, например, для хабра такое приложение есть. Это просто удобно.
По существу с обыкновенными сайтами гораздо больше мороки чем с оптимизированными версиями. Все эти трюки с увеличением, прокруткой и т.п. интересны в начале, потом же хочется просто читать, не тратя время на всякую возню с масштабированием.
Так что через некоторое время неизбежно приходишь к более оптимальным решениям.

А вот для айпада отсутствие флэша мне уже кажется довольно спорным, но на айфоне, повторюсь, совершенно пофиг.

Что же касается собственно iPhone, то это отличная вещь. Я удовлетворен на все сто. В первую очередь, меня восхищает интерфейс, быстрый, отзывчивый, ясный. Это образец, Образец для подражания с большой буквы.
Недавно я пощупал htc desire на андроиде, так вот хочу сказать: типичное не то. Ярко? Да. Быстро? Да. Разрешение экрана обалденное, цветопередача вах! Но, нет той глубины проработки интерфейса, той простоты и тщательности в проработке каждой детали.
На айфоне каждый пиксель вылизан до идеала. Каждому элементу интерфейса найдено почти идеальное место. Когда пользуешься этим устройством то понимаешь, да, это должно работать именно так. Как дизайнер, я хорошо знаю что эта “простота” дорогого стоит.

Весь этот пост я выстругал на айфоне, лежа на диване. И это было вполне удобно!

23
Авг
Comments Off

Html 5. На это стоит взглянуть.

Я знаю, что вы возможно уже читали это на хабре, тем не менее оставлю ссылку на память:

http://hakim.se/experiments/

Это уже довольно интересно выглядит.

10
Авг
Comments Off

InDesign, особенности экспорта во flash

Делаю интерактивную презентацию. Верстку экспортирую прямо в fla файл из InDesign. В принципе все проходит нормально за исключением одного неприятного глюка: при экспорте текстовые строки бьются на части и если в текстовом боксе нет ничего кроме пробелов… то вас ждут неприятности.

Когда я в action script пытался получить размеры мувиклипа (ширину или высоту) содержащего текстовые блоки только с одним или двумя пробелами, то получал на выходе невероятное число типа 25 000 000 пикселей. Я довольно долго вычислял, что является причиной этого глюка, но в конце концов понял, что виноваты эти маленькие, коварные текстовые блочки с пробелами. как только эти блоки убираешь, то все нормализуется.

Учитывая объем этой презентации - 120 страниц, пришлось написать скрипт, который убирает эти пробелы автоматом, весьма удобное мероприятие вот примерно такой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var flash_doc = fl.getDocumentDOM();
var flash_tl = flash_doc.getTimeline();

var lib = fl.getDocumentDOM().library;
var itemNo = 1;
var itemName = 'SpreadsEng/Spread_0' + itemNo;
var myArray = new Array();

while (lib.itemExists(itemName))
  {
        var myArray = new Array();

        lib.editItem(itemName);
        curr_tl = flash_doc.getTimeline();
        flash_doc.selectAll();
        var theSelectionArray = fl.getDocumentDOM().selection;
       
        for(var i=0;i<theSelectionArray.length;i++){
                if (theSelectionArray[i].elementType == "text"){
                    var str = theSelectionArray[i].getTextString();
                    if (str.length == 2) {
                        //fl.trace(itemName+ "  element space >" + str.charCodeAt(0) + "<   string: " + str);
                        //поиск двух пробелов
                        if (str == "  ") {
                            fl.trace("two spaces!!!");
                            myArray.push(theSelectionArray[i]);
                            }
                            //поиск одного пробела 32, 9
                        /*if (str.charCodeAt(0) == 32){
                            fl.trace(itemName+ "  element space >" + str.charCodeAt(0) + "<   string: " + str);
                            myArray.push(theSelectionArray[i]);
                        } */

                    }
                }
            }
     flash_doc.selectNone();
     flash_doc.selection = myArray;
       
        if (myArray.length >0) {
                flash_doc.deleteSelection();
        }
        itemNo++;
     if (itemNo <10){
        itemName = 'SpreadsEng/Spread_0' + itemNo;
    } else {
        itemName = 'SpreadsEng/Spread_' + itemNo;
    }
   
 }

Скрипт надо сохранить в папке
C:\Users\user\AppData\Local\Adobe\Flash CS5\en_US\Configuration\Commands
и он появится в меню Commands во Flash IDE.

Celadon theme by the Themes Boutique