Записки о Flash

Обновление MouseWheel

Давненько ничего не писал :)

Обновился MouseWheel, теперь захват мыши работает сразу и без вопросов. Протестировано на Firefox, IE7, Opera под Windows.

//TODO: Надо бы поплотнее заняться блогом.


6 comments

Захват колеса мыши

После перехода на ActionScript 3 и Flash Player 9 вы наверняка сталкивались с тем, что размещенный на странице ролик не захватывает скролл мыши (как это было в ActionScript 1/2), позволяя пользователю прокручивать содержимое страницы независимо от того, находится ли ролик в фокусе или нет. Достаточно давно я опубликовал класс GlobalMouse, он решал данную проблему, но в целом был неудобен именно для решения подобной проблемы. В связи с этим, я написал класс MouseWheel, позволяющий захватывать и отпускать скролл мыши в любой момент времени при необходимости. К сожалению, браузер Safari, а также Mac OS-версии популярных браузеров (Opera/Firefox) не позволяют захватывать скролл мыши, поэтому данный класс в них работать не будет.

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


28 comments

Первые впечатления о Flash CS4 Professional

Итак, попалась в руки новая версия Flash — Flash CS4 Professional за номером 10. Это скорее не обзор, а просто впечатления от двух часов работы с новой версией флеша. Осторожно, скриншоты в PNG и не говорите, что я вас не предупреждал.
Read more


12 comments

getDefinitionNames

У класса ApplicationDomain есть замечательный метод getDefinitionByName, возвращающий нам класс нужного объекта или функцию. Но нет метода getDefinitionNames, возвращающий имена всех классов, находящихся в данном домене (или загруженном swf). Моя функция getDefinitionNames призвана устранить данный недостаток. Для получения имен классов необходимо передать объект LoaderInfo или ByteArray, содержащий корректный swf.

Исходники

Версия 2.1 от 09.03.10:

  • Теперь в обычный режим поиска возвращает только классы (ранее были ещё и интерфейсы).
  • Появилась поддержка Flash 10 (наконец-то :) ) и типа данных Vector. В расширенном режиме поиска классы типа Vector. (где X — имя класса) также будут перечислены.
  • Версия 2.0 от 16.09.09:

  • Новый режим extended, работающий по другому алгоритму (чуть-чуть медленнее обычного поиска). В этом режиме вы получите не только список классов и интерфейсов, а все доступные definitions, т. е. функции, пространства имен, константы, переменные и т. п.
  • Также появился режим onlyLinked (в этом случае не работает extended), при котором вы получите список только тех классов, которые указаны в качестве linkage в библиотеке swf. В том числе те, которые создаются при использовании метатега [Embed]. Такой режим существенно быстрее обычного и расширенного поиска и рекомендуется в тех случаях, когда вы загружаете библиотеку графических и звуковых ресурсов и вам нужен список только самих ресурсов.
  • Эта версия полностью совместима с предыдущими, при обновлении вам потребуется всего лишь обновить код getDefinitionNames
  • Версия 1.1.1 от 16.09.09:

  • Ещё раз исправлена ошибка поиска классов :)
  • Версия 1.1 от 13.09.09:

  • Исправлена ошибка, в результате которой второй и последующие кадры swf, содержащие код, не распознавались
  • В качестве аргумента в функцию можно передавать как LoaderInfo (как было в предыдущей версии), так и ByteArray, содержащий корректный swf
  • P. S.: Решение для тех, кто хочет знать о подгруженном swf больше.


    20 comments

    Unity3D

    Они захватят мир! 3 мегабайта плеера и море фич!
    Unity3D Demo

    Unity3D Demo

    /me побежал кодить на C#.


    14 comments

    О троллях

    В современном интернете, особенно в последнее время, развелось очень много маленьких жучков. Обычно их называют троллями (см. Троллинг@WikiPedia). Как правило, они заселяют различные форумы и прочие места массового скопления и общения людей.
    Вероятно, моя популярность достигла такого уровня, что у меня появился свой, персональный тролльчик. Как сказал Рост — «Кстати, с популярностью тебя! Незаметным не гадят :-) ».
    Уж не знаю, чем я ему насолил, но я ему определенно нравлюсь, так как он ручной уже около года (ну, может быть, поменьше). В какой-то мере мне это даже льстит (ещё бы, персональный тролльчик!). Он прекрасно испражнялся в моем блоге, но после того, как я отключил комментарии без регистрации, он изобрел новое средство — писать от моего имени в других блогах. А посему, если вы видите комментарий, якобы от моего имени, с орфографическими и грамматическими ошибками (ну или без них), оскорбляющий вас или других людей, намеренно привлекающий к себе внимание каким-либо провокационным высказыванием или доказывающим свое мнимое превосходство в какой-либо области — это не мой комментарий. Будьте осторожны.


    3 comments

    FontLoader — 2.2!

    Вышла новая версия FontLoader — 2.2!
    Напомню: FontLoader — инструмент, позволяющий вам загружать любые swf-ролики версии 6 и выше, так или иначе содержащие embedded-шрифты для дальнейшего их использования в вашем приложении. Теоретически, возможна загрузка роликов версии от 3 до 5, но на деле шрифты не регистрируются. С предыдущей версии FontLoader сильно изменился:

    • Полностью переписан код, исправлены ошибки в парсинге, уменьшен размер кода
    • Нет больше событий FONTS_NOT_FOUND, REGISTER, регистрация всех шрифтов происходит единовременно, а не по одному, как было раньше
    • Больше не поддерживаются шрифты статических полей
    • Используются только стандартые события flash.events.*, а значит работа с классом стала проще и нагляднее

    История:
    v. 2.2 (25.06.09): Добавлено событие VERIFY_ERROR, возникающее в случае, если загруженные данные имеют неверный формат;

    v. 2.1 (15.06.09): Теперь класс совместим с AIR. Также добавлен новый метод loadBytes, аналогичный по действию одноименному методу класса Loader.

    Посмотреть демо. Код класса можно получить там же.

    Напомню, что класс распространяется по лицензии CC-BY-ND.


    16 comments

    LoaderInfo Vulnerability Fixed?

    Похоже, нас услышали.
    В Flash 10 AS3 API обнаружилось изменение описания метода getLoaderInfoByDefinition класса LoaderInfo. Было:

    getLoaderInfoByDefinition () method

    public static function getLoaderInfoByDefinition(object:Object):LoaderInfo

    Returns the LoaderInfo object associated with a SWF file defined as an object.

    Player Version: Flash Player 9 Update 3.

    Parameters object:Object — The object for which you want to get an associated LoaderInfo object.

    Returns LoaderInfo — The associated LoaderInfo object. Returns null when called in non-debugger builds (or when debugging is not enabled) or if the referenced object does not have an associated LoaderInfo object (such as some objects used by the AIR runtime).

    Throws SecurityError — The caller is not running in the local trusted sandbox.

    Стало:

    ???????? ????? ????????getLoaderInfoByDefinition () method
    public static function getLoaderInfoByDefinition(object:Object):LoaderInfo

    Language Version : ActionScript 3.0
    Player Version : Flash Player 9.0.115.0

    Returns the LoaderInfo object associated with a SWF file defined as an object.

    Parameters
    object:Object — A SWF file object.

    Returns
    LoaderInfo — The associated LoaderInfo object.

    Т.е. теперь возвращается LoaderInfo того swf, который создал объект, переданный в аргументе метода. Таким образом, описанной мной дыры теперь нет.

    Проверить это сейчас у меня нет возможности, позже выясню этот вопрос.


    4 comments

    О дырах и багах

    Обнаружил интересный баг работы события ADDED_TO_STAGE:

    This content requires Adobe Flash Player.


    Сколько раз будет вызван обработчик addedToStage для sp0? Я всегда полагал, что один раз. Оказывается, он будет вызван три (!) раза. Это о багах.

    Теперь о дыре, обнаруженной BlooDHounD-ом вместе со мной. У класса LoaderInfo есть один интересный статический метод getLoaderInfoByDefinition, принимающий в качестве аргумента любой объект и возвращающий объект LoaderInfo. Дело в том, что LoaderInfo, который он возвращает, имеет ссылки на content (document class нашего приложения), а значит на stage и прочие объекты, доступ к которым, вообще говоря, должен быть ограничен. На лицо серьезная дыра, позволяющая обращаться к stage из любого объекта или класса, не говоря уже об ApplicationDomain, причем, независимо от того, в каком домене находится объект, вызывающий данный метод. Простой пример:

    This content requires Adobe Flash Player.


    Письмо о дыре будет отправлено в Adobe.


    8 comments

    Видеопособие по созданию прелоадера во Flash CS3

    Jarrod Medrano из Portent Interactive опубликовал в своем блоге видеопособие по созданию AS3-прелоадера во Flash CS3. Thanks, Jarrod! :-)


    8 comments

    « Previous PageNext Page »