Archive for the ‘flash’ Category



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.

27
Апр

Realaxy. Первые впечатления. Hands on review.

Первые впечатления… тут пожалуй подойдет такая метафора: прогулка на лыжах по песку.

Впрочем, речь даже не о прогулке, а о попытке сдвинуться с места. Я не буду давать никаких оценок, я просто опишу свой опыт первых часов работы с Realaxy.

Итак, дано:

Пользователь, который не имел дела с flex sdk, не знает ничего о jetbrains кроме самых общих слов. При этом  активно пользуется редактором кода FlashDevelop, и имеет небольшой опыт работы с Flex Builder. Realaxy я попытаюсь использовать просто как редактор Action Script кода.

Ставим Realaxy. Все проходит быстро.

Первый запуск. Узнаем, что имеем дело с триальной версией на 30 дней.

Создаем проект.

Выбираем в меню Action Script проект

realaxy_01

жмем далее, выбираем имя проекта. Ниже идет какая- галочка «Создать модуль».

realaxy_02

Пожимаем плечами, бог его знает, что это, наверное так надо.

realaxy_03

Жмем далее, пишем имя главного класса, ок!

Появляется окошко в котором показывается прогресс создания проекта. Машина на которой производилось тестирование - старье, пентиум 820D. Ждем. Ждем долго. Настолько долго, что я начинаю волноваться… Ок. Спустя каких-то три минуты имеем проект.( Позже выяснилось, что это только первый раз так долго. Потом все быстро грузится)

Открываем в дереве каталогов главный модуль. Вот она революция! Ну наконец-то!

realaxy_041s


Легким нажатием Enter генерим метод, даем ему имя.

Создаем переменную: var txt : String;… String почему-то подсвечено красным… Пробуем еще раз, снова. Не знаю такого типа, дает мне понять программа.

realaxy_05_nostring

Хорошо. А Number ? - Хрен. int? - фигушки.

realaxy_05_num

Что за черт?

UPDATE

В комментах Евгений Потапенко подсказал: чтобы тип переменных или класс стал доступен в проекте его надо импортировать с помощью ctrl+R. В появившемся диалоговом окне пишем имя переменной или класса, после этого она (он) становится доступной.

UPDATE 2

Александр Елисеев: по CTRL+R импортируется не класс, а вся модель (пакет), которая содержит этот класс. Можно также нажать CTRL+M и выбрать в списке именно пакет, классы из которого требуется сделать доступными. Модели из библиотек имеют постфикс @swc_stub после имени пакета, поэтому, например модель дефолтного пакета называется просто @swc_stub.


Пытаюсь написать trace(”Hello world”); редактор не понимает, чего я хочу, подсвечивает красным.

realaxy_05_notrace

Минута молчания.

Создаю новый проект. Та же фигня. Ладно.

Лезу смотреть скринкасты. Делаю как там.

Пишу в строке “Hello world”, ставлю на нее курсор, жму ctrl-alt-V. О боги! Сработало, наконец-то! Все как в сказке - редактор сам создал переменную! Даю ей имя, ура!

realaxy_05_nstring

Выдыхаем. Ну ка – ну ка, а что если мне нужна просто строковая переменная без инициализации. Ок. Создаем шаблон переменной, даем имя пишем тип… var txt2 : String; Что за черт?!

realaxy_05_nostring2

Подсвечено красным! Т. е. то, что редактор создал сам -  его устраивает. А моя прекрасная переменная ему не катит? (Вспомнилось про поддельные елочные игрушки - все у них тоже самое, как у настоящих, но… не радуют!)

Где-то, на пятом по счету, новом проекте я внезапно смог написать trace(txt, …args);  без того, чтобы редактор подсветил это красным.

Компилим swf - ура! Работает.

Только куда trace выводится? Я пока не понял. Не нашел.

UPDATE

Евгений Потапенко: по трейсам - нужно импортировать logger language (ctr+L - “logger”)
и сообщения выводить c помощью trace statement, (не глобальной функцией trace). trace и ctrl+space даст в списке trace statement.
так же доступны debug, error, warn стейтменты.
сообщения выводятся внизу в панеле “messages”.
кликнув на сообщении можно перейти в точку где сообщение было послано.

Автокомплит

Создаем переменную типа MovieClip - отлично, а к примеру TextField - хренушки.

realaxy_06_notextfield

Причем в списке автокомплита значатся только классы из пакета flash.display. А как подключить остальные? Никакой import flash.text; редактор написать не дает, светит краcным. Но ведь библиотеки где-то надо прописать? Точно так же я не смог добавить листенер, причем hasEventListener в списке автокомплита есть, а addEventListener нет.

Беготня по окнам свойств проекта, класса и модуля не дала результата, там и так упомянут playerglobal.swc включающий в себя все пакеты flash, но что толку?

Что это глюк или это, я тупо не знаю. Обычно в таких случаях я читаю справку. Но здесь ее нет. Совсем. Вопрос пока повис в воздухе.

UPDATE

В комментах Евгений Потапенко подсказал: чтобы тип переменных или класс стал доступен в проекте его надо импортировать с помощью Сtrl+R. В появившемся диалоговом окне пишем имя переменной или класса, после этого она (он) становится доступной. См. иллюстрацию.

textfield_addition

Сам автокомплит работает… м-м-м иначе, чем во FlashDevelop, где я успеваю написать pr а он уже высвечивает подсказку private, остается только нажать Enter. То есть я пишу, а редактор FlashDevelop дает подсказку сразу. В Realaxy при наборе текста надо нажать Ctrl-пробел или Ctrl+Shift+пробел, и только тогда он показывает окно с подсказкой автокомплита.

Во FlashDevelop если я создал переменную var mc : MovieClip; и потом пишу mc = new , то сразу после new дается подсказка MovieClip, остается нажать Enter. Очевидно, не так ли? Realaxy в такой же ситуации рисует мне красный знак вопроса  mc = new ?. Спрашивается, почему? Ведь вроде бы ясно что я хочу создать новый мувиклип, и первое предположение для автокомплита очевидно - MovieClip.

Realaxy может легко создать метод, или всю конструкцию for (var i:int…  сразу целиком.  Но автокомплит в мелочах пока далек от совершенства.

Realaxy пока ведет себя нестабильно. То все работает как в скринкастах, то, минуту спустя,  редактор начинает дурить… строптивый у него характер, как у необъезженной лошади. Довольно часто можно увидеть это:

realaxy_08_error

Причем после возникновения ошибки и перезагрузки - проект слетает. Окно с кодом открывается пустым, а сам редактор иногда впадает в кому. Пока оказалось проще всего удалить папку с проектом и начать сначала, чем разобраться в том, как это исправить. И примерно с десятого запуска редактора проект генерится пустым, без модуля. То есть в структуре проекта есть только библиотека, а самого package нет. Я пробовал создавать вручную проект и его начинку, но оно не компилится, выдает ошибки.

Вот такая получилась история. Пока работа с Realaxy не является “работой”. Это пока скорее изучение нового подхода, демонстрация новой концепции, можно поиграться, потрогать. А местами это похоже на загадку. Но интересно.

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

23
Апр
Comments Off

Realaxy. Делюсь впечатлениями от презентации на Creative Future 2010

realaxy

Не зря говорят, что лучше один раз увидеть, чем тысячу раз услышать. И я увидел (и услышал) презентацию Ивана Дембицкого и Евгения Потапенко на мероприятии Creative Future 2010 об их детище - редакторе Realaxy. Я думаю,что у этого продукта есть все шансы стать хитом.

Внешне, это обыкновенный редактор кода, однако за довольно привычным интерфейсом скрыты возможности выходящие за рамки привычных представлений о редакторе кода для Action script 3.

Этот продукт построен на базе jetbrains mps. Это система  мета программирования, позволяющая расширять язык программирования по своему усмотрению. Мета программирование… м-м-м? Звучит, мягко говоря  не слишком ясно. Не бойтесь, я постараюсь объяснить… по крайней мере в той степени в которой это доступно моему пониманию.

Во всяком случае, в первую очередь Realaxy это очень, ну просто очень удобный редактор кода. С автокомплитом, с подсказками и автоматической генерацией кода, с подсветкой всего чего только можно. Все это можно внимательно изучить в скринкастах. Я не буду тут слишком углубляться в эти  детали. Я остановлюсь на том, что привлекло мое внимание.

Первое, что удивило  - наличие разбиения документа на секции в совершенно ультимативном порядке. То есть: вы создаете класс, и в документе сразу, жестко размечены секции: <<static fields>>,<static methods>>, <<methods>> и т.п. они обозначены специальными текстовыми тегами. И это означает, что cоответствующие переменные и методы могут быть размещены только там, где обозначен раздел для них. Т.е. вас заставляют делать правильный код, не позволяют мешать все в кучу. Эта идея, на мой взгляд весьма толковая, особенно для таких начинающих деятелей от дизайна,  как я, жестко задавать шаблон документа. И тут настоящий воин должен задаться вопросом какого хрена, а что это простите за формат документа такой, который может, что-то не позволить? Как тупой текстовый документ может не позволить мне что-то?…

А вот в том то и дело, что редактор Realaxy хработает с данными не в виде обыкновенного текстового файла as. Да, дорогие мои девелоперы, это XML (он конечно тоже текст, но все-таки это явно не action script). Получается, что разработка проекта , будучи начатой в этой среде, довольно жестко к ней привязывается.

Такой подход дает довольно интересные возможности.

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

Безусловно, в любой момент вы можете экспортировать из редактора обыкновенный action script код для использования в других приложениях, но при этом вы получите некоторое количество кода сгенерированного автоматически с о всякими волшебными автоматическими именами типа “bs_23434″.

Еще одной необычная, по крайней мере для меня, возможность - вы можете переопределять синтаксис языка, или  в терминологии этой среды - создавать расширения. Фактически Realaxy позволяет создавать нечто вроде надстройки над используемым языком. Для ясности приведу пример: кто-то из слушателей заметил, что это подобно тому, как если бы вместо ключевого слова function в редакторе показывалась бы условная иконка, наподобие смайлика, а область видимости ptivate или public тоже обозначалась условным значком… То есть у вас есть возможность переопределять конструкции языка для вашего удобства, для лучшей удобочитаемости кода. По существу это и есть основная идея мета программирования - возможность расширения языка, вот тут подробнее, но простите, на английском. Эта, на первый взгляд, неочевидная возможность позволяет улучшить удобочитаемость кода и сократить время разработки за счет уменьшения избыточной писанины (я думаю вы в курсе насчет некоторой избыточности синтаксиса action script). Планируется создать вокруг продукта некое сообщество пишущее эти расширения, с форумами, обсуждениями и т.п. Говорят что, что омериканцы проявляют нешуточный интерес к этим возможностям Realaxy.

(Еще раз подчеркну, я объясняю все так, как я понял, поэтому могу где-то ошибаться. Желающие могут обратиться к первоисточнику: тут в комментариях на хабре сами авторы дают пояснения по вышеописанным пунктам)

И еще пунктирно, что запомнилось:

  • В Realaxy есть богатые возможности рефакторинга, которые на этой платформе можно с легкость выращивать пачками любых размеров и цветов…
  • Код компилируется стандартным компилером flex3.

Переходя к жестокой прозе жизни, хочу отметить, что проект этот пока еще совсем бета – баги, глюки и  прочие прелести большого растущего организма, плюс эффект презентации, когда отказывает и глючит все то, что в повседневности ведет себя пристойно. Но, это как известно, лечится и я надеюсь со временем и глазик перестанет дергаться и ножка выпрямится… Я вот тоже надеюсь получить бету и помучать ее как следует. Документации пока нет никакой, кроме скринкастов, но что касается базовых возможностей редактирования - клавиатурных сокращений там совсем не много, и благодаря подсказкам, все довольно понятно.

Я надеюсь, что ходе своего развития Realaxy не перейдет ту черту за которой начинается пародия на заботу о нуждах пользователя, по типу редактирования текста в ms powerpoint, когда редактор настолько умен, что способен довести до белого каления любого пользователя, которому нужно нечто более сложное, чем типовой шаблон. Я имею ввиду мудацкое поведение пауэрпойнта при атоматическом форматировании текста, которое определяется какими-то неочевидными закономерностями. Или такой необходимый Puntoswitcher, нагло пытающийся переводить код action script на русский язык, штука нужная и умная, но иногда хочется взять и у…ть ее чем-нибудь тяжелым… Простите, отвлекся.

Релиз Realaxy планируется в августе или сентябре (”…Какого года?” - ядовитый вопрос из зала, я лично, очень надеюсь, что 2010).

Иван сказал, что продукт будет платный, стоимость около ста баксов. Возможно когда-нибудь он станет бесплатным.

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

P.S.

Несколько слов о собственно мероприятии Creative Future 2010. Организовано все весьма толково, народу было много, вернее ОЧЕНЬ МНОГО. В перерывах раздавали бесплатные кофе-соки-воды и прочие бутерброды и даже пиво с чипсами после 19.00. Самая главная презентация была посвящена новым возможностям CS5. Я честно говоря, читал о них еще недели две назад, а про флеш5 еще с месяца два тому назад… но одно дело читать, а другое живая демонстрация релизного продукта.

Понравилось как грузится 64-битный фотошоп на эппловском ноуте под виндами - 3 секунды. Презентеры явно наслаждались эффектом - нажали кнопку, и сосчитали “раз, два, три” и он открылся. Я вот не могу пожаловаться на свой core i7 c 64-битными win7, но у меня четвертый явно не три секунды грузится…

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

19
Апр
Comments Off

Новый проект: Феи, бабочки и часы!

В апреле сошел со стапелей теперь уже очередной мой коммерческий проект — флэш сайт ресторана “Золотое время”:

zvremya_ru_01s

Сайт ресторана "Золотое время"

Да. Там летает фея, бабочка и играет блюз Golden time. Всю эту красоту мне помогла реализовать художница Светлана Шелихова.

Проект я реализовал на шаблоне проектирования MVC, активно используя собственные наработки предыдущих проектов, один из которых в эфире уже более года - zoom-mebel.ru

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

Проект был реализован в довольно сжатые сроки. В конце февраля состоялось первая встреча с клиентом, а 1 апреля сайт уже был открыт. Сказалось наличие готовых наработок от предыдущих проектов и мой существенно возросший опыт программирования на as3.

Что касается технических аспектов, то здесь есть два интересных момента:

  1. Я прикрутил в раздел “Контакты” — гугловскую карту. Оказывается у них есть флешовый API, с довольно развитыми возможностями. Я бы с удовольствием прикрутил и яндекс карты, но у них пока нет флэш api.
    В разделе “Контакты” пока остался глюк полосы прокрутки, видимо внедренная карта возвращает полную высоту всей карт, что составляет какую-то немыслимую величину в десятки тысяч пикселей, в результате после ресайза окна браузера полоса прокрутки выглядит так, как-будто там вся эта карта мира засунута в полный рост.
  2. Пришлось повозиться с феей, чтобы она прилетала и улетала когда надо, научил ее владеть волшебной палочкой :)

Что касается идеи сайта, то тут копирайт полностью принадлежит заказчику. Заказчик совершенно ясно представлял что ему нужно — фея, дерево, бабочки, сказочная атмосфера… И самое главное:в результате он получил именно то что хотел.

В конце концов им лучше известна их аудитория и ожидания приходящей к ним публики, поэтому я целиком сосредоточился на реализации и результат меня радует.

3
Апр

SEO и flash

Зачем я вообще касаюсь этой темы?
Да все просто. Вот написал я клиенту сайт. Вывесил. Все, готово. А клиент спрашивает: а чей-то мы в поисковой выдаче не обнаруживаемся?

Строго говоря, это не ко мне. Я дизайнер, я сайт сделал, запулил на сервер и как говорится “от меня сигнал ушел”. Однако это все-таки не серьезно, на мой взгляд, так относится к делу. И решил я посмотреть что можно сделать с флешовым веб-сайтом, чтобы он как минимум не был черным ящиком для всяких яндексов и гуглов. Если поисковые роботы не поймут, о чем эта страница, то ее вряд ли вообще кто-нибудь, когда-нибудь увидит в поисковых выдачах.

Всем известно, что flash содержимое страницы это очень не правильная штука с точки зрения поисковой оптимизации, фактически, заходя на веб сайт поисковый робот видит одну html-страницу,  все содержимое которой - один внедренный swf ролик. Причем зачастую даже тег <title> не заполнен, соответственно для робота такая страница - ни о чем. Конечно, можно возразить, что сегодня google вроде как может индексировать содержимое swf ролика, но если весь контент ролика подгружается через xml, то поисковый робот опять в пролете.

Что же делать?

А делать надо вот что:

1. html страница в которую встроен ролик должна содержать осмысленно заполненные поля <title>, <meta name=”description” content=”"> и <meta name=”keywords” content=”">. Например страница посвящена яблокам.

<title> Страница о яблоках</title>
<meta name=“description” content=“яблоки, все о яблоках, яблоки и жизнь, все из яблок, яблоки и культура”>

<meta name=“keywords” content=“яблоки, плоды, фрукты, apples”>

Я не буду здесь распространяться о том, что именно надо вписывать в эти теги, поскольку не специалист, но заполнить их хоть каким-то осмысленным содержанием относящимся к сайту - дело минутное.

2. Тег <noscript> нужно заполнить содержимым, дублирующим содержание сайта во флеше. Обычно ролик встраивается в страницу с помощью скриптов. Все относящиеся к этому делу функиции на странице находятся в разделе <script></script>. Если скрипты в браузере отключены, то на странице отобразится содержимое тега <noscript>. Но самое главное для нас то, что поисковый робот индексируя страницу прочтет все что там есть, и увидев нормальный, понятный для него контент внутри тега <noscript> он будет очень доволен!  В качестве примера зайдите сюда,  на сайт adobe.inspire и потом просмотрите код страницы и вы увидите то о чем я вам здесь толкую. Именно так все устроено у тех, кто понимает в этом толк. Причем если отключить скрипты мы получим совершенно лысую страницу без всяких украшательств, содержащую только текст, оно и понятно, вероятность того, что кто-то будет смотреть эту страницу с отключенными скриптами стремится к нулю… Главное что поисковые боты получат, что им нужно.

Опытным путем я выяснил, что браузер Chrome не поддерживает тег <noscript>, об этом и в гугле пишут. Если запихнуть содержимое страницы прямо внутрь div’а в который внедряется флэше, то при отсутствии флеш ролика будет показано это содержимое, так что можно даже без <noscript> обойтись.

Еще раз хочу подчеркнуть, что речь идет именно об оптимизации для роботов поисковых систем. Если ваш сайт попадет к примеру на thefwa.com или к какому-нибудь блогеру-тысячнику в пост, то трафик к нему придет и без этих ухищрений. Но вы туда сначала попадите…

Собственно вот и все, что имею сказать. Может есть и другие рецепты, но я о них пока ничего не слышал.


Celadon theme by the Themes Boutique