06/05/2010

SimplePreloader for Animator

Опубликовано в: Опыт, Эксперименты — Тэги: , — Nicolas Prof @ 19:05

Специально для людей, которые не очень «дружат» с AS3. Сделал простенький preloader.
Ради интереса воспользовался ByteTween.

Все что нужно, это иметь под рукой preloader.fla, в котором, на сцене должен находиться MovieClip, будущий preloader.
Preloader может состоять из 100 фреймов, каждый фрейм соответствует проценту загрузки, а так же может содержать текстовое поле (Dynamic) с именем ‘txt’, для отображения статуса загрузки.
Все что нужно произвести, это небольшие изменения в файле Settings.as, где нужно указать путь к файлу, который нужно загружать, если preloader.swf и загружаемый файл находятся в одной папке, то просто укажите название файла. А так же в Settings.as, необходимо указать имя MovieClip preloader’а, находящегося на сцене. По умолчанию, ’stagePreloader’.

Download Source Files

P.S.
ByteTween ужасный Tween Engine, не пользуйтесь им, в серьезных проектах, он не стоит сэкономленных 1,5кб.
Старался максимально доходчиво написать…

15/01/2010

Quadratic Bézier – Segment

Опубликовано в: Эксперименты — Тэги: , , , — Nicolas Prof @ 22:13

Сейчас работаю над еще одним очень важным компонентом пользовательского интерфейса – подсказка (Tooltip).
Так как компонент будет поддерживать закругление углов (Rounded corners), необходимо разработать полноценную логику рисования части кривой Безье, после пересечения с «усиком» подсказки.

Смотреть в действии

P.S.
Всегда хотел иметь компонент такого рода под рукой. Так что, PROFGUI в скором времени обзаведется 5-ым компонентом.

03/01/2010

PathFinder : Demo

Опубликовано в: Эксперименты — Тэги: , , , , — Nicolas Prof @ 11:02

Предлагаю вашему вниманию, собственную реализацию вспомогательного framework по обнаружению минимального пути в графе. На данном этапе разработки, PathFinder, поддерживает два алгоритма: алгоритм Дейкстры и «А» звезда. Алгоритмы изрядно изменены, для максимальной совместимости с framework, за основу взяты лишь идеи этих алгоритмов.

Достоинства и недостатки реализованных алгоритмов.

Алгоритм Дейкстры:
+ точное обнаружение минимально пути в графах любой сложности;
+ позволяет обнаруживать путь в сложных/запутанных графах;
- в 3 раза медленнее, чем алгоритм «А» звезда;

Алгоритм «А» звезда:
+ быстрый метод обнаружения пути;
+ идеально подходит для графов с принципом построения как у «королевского» графа;
- некорректно находит путь в сложных/запутанных графах;

Смотреть в действии

07/12/2009

Tips & Tricks 3

Опубликовано в: Опыт — Тэги: , — Nicolas Prof @ 22:05
  1. Papervision: При использовании 3Д на сайте, в 90% случаев необходимы 3D объекты в масштабе 1:1 к 2D объектам. В последнем проекте необходимо было сделать куб как элемент навигации, при этом текстуры на гранях не должны были масштабироваться:

    Actionscript:
    1. _camera.z = (_camera.zoom - 1) * _camera.focus + _cubeSide * 0.5;

    куб находится в нулевых координатах.

  2. Если есть XML дерево, в котором, одно и тоже XML property может присутствовать не во всех элементах дерева. И при применении фильтра:

    Actionscript:
    1. myXML..item.(@id == someID)

    вы получаете ReferenceError о том, что переменная @id не определена. Используйте другой фильтр:

    Actionscript:
    1. myXML..item.(attribute('id') == someID)

  3. При разработке сайта, на котором будет функционал требующий работы с SharedObject, приходится поверять логику работы, когда человек впервые на сайте, и не только. Самый простой способ, это удалить файл .sol. Если вы думаете, что очистка кэша в браузере поможет вам, то вы ошибаетесь. Так же вы конечно можете сделать программную кнопку, при нажатии на которую, будет происходить удаление SharedObject. Но все же, пару раз удалить файл из системы, как по мне, проще. Более подробно, где их искать в различных системах, можно почитать в Wikipedia
  4. Timer отрабатывает не сразу после вызова метода start(), а лишь через значение delay, которое вы указали в конструкторе. Что бы заставить отработать сразу, правильнее всего сделать вот так:

    Actionscript:
    1. _someTimer.dispatchEvent(new TimerEvent(TimerEvent.TIMER));
    2. _someTimer.start();

    Actionscript:
    1. this.someTimerListener(null);

    Вызвать сразу listener, плохо тем, что вы не сможете использовать updateAfterEvent

  5. Маска с поддержкой прозрачности с помощью BlendMode. Хорошая вещь, как для программистов, когда требуется создать полупрозрачную маску, и при этом контент под маской анимируется, так и для аниматоров, так как не нужно никакого кода.
    Техника очень проста:
    есть контейнер в котором все объекты, маска и содержимое, которое нужно поместить под маску. Для этого контейнера устанавливаем BlendMode.LAYER.

    Actionscript:
    1. _container.blendMode = BlendMode.LAYER;

    Все размещается по слоям. Маска обязательно находится выше содержимого. Для маски устанавливаем BlendMode.ALPHA.

    Actionscript:
    1. _gradMask.blendMode = BlendMode.ALPHA;

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

    Actionscript:
    1. _content.mask = _mask;

    В итоге, все будет выглядеть где то так:

    Actionscript:
    1. _container.addChild(_content);
    2. _container.addChild(_gradMask);
    3. _container.addChild(_mask);
    4.            
    5. _gradMask.mouseEnabled = false;
    6. _gradMask.blendMode = BlendMode.ALPHA;
    7. _container.blendMode = BlendMode.LAYER;
    8. _content.mask = _mask;

    P.S.
    Более подробно для аниматоров. Создаем Movieclip, меняем ему BlendMode на Layer, помещаем в него 3 Movieclip'a: Нижний слой - Содержимое, Средний слой - маска, делаем ее маской для содержимого, Верхний слой - полупрозрачная маска, меняем ей BlendMode на Alpha (не нужно полупрозрачную маску совать под маску, или пытаться ее тоже сделать маской).

    P.P.S.
    Если кто то всю жизнь пользовался только таким способом с помощью BlendMode, то для вас есть более простой способ, который отлично подходит для статического содержимого, к примеру текст.

    Actionscript:
    1. _mask.cacheAsBitmap = true;
    2. _content.cacheAsBitmap = true;
    3. _content.mask = _mask;

    Те же кто думал, что нужно BlendMode + cacheAsBitmap, то исправляйте код. Разве что вы могли использовать cacheAsBitmap для сложного вектора.

02/07/2009

Powered by Alternativa3D

Опубликовано в: Эксперименты — Тэги: , , , , , , — Nicolas Prof @ 17:30

Реализация моего портфолио прошла долгий и тернистый путь, от маленькой трешовой флешки с кровью и рваной бумагой с звуками из игры «Носферату», до достойного 3D приложения.
Первая 3D реализация использовала Papervision Great White Alpha, т.е. самая первая и сырая версия Papervision 2.0. Движек выдавал в среднем 24 fps на «игровом» компьютере. Следующая версия портфолио уже использовала Away3D, интерактивность немножко прихрамывала, и API несильно отличалось, и все так же была возможность использовать Sprite материалы. Так же, кубики уже не вращались все время, а только когда пользователь использовал интерактивные возможности, т.е. сцена рендерилась при изменениях. FPS при рендеринге все так же «проседало».

И вот 4.0 версия портфолио, которая использует Alternativa3D. Вся навигация на сайте построена на мыши: левая, правая клавиши и колесико. Пропал МР3 плеер. На сайте два режима навигации, как вам идея? Почему не предоставить пользователю несколько режимов навигации, и пусть он выбирает более удобный для него. Так и появилась альтернативная навигация.
Производительность у нового движка отличная. Разработчики создали свою отображаемую модель, начав все с нуля (Object3D extends Object). Все бы хорошо, но вот очень нехватает параметра alpha и visible. Так же есть некоторые косяки, после масштабирования объектов, иногда начинают появляться артефакты в виде дополнительных треугольников на поверхности. Так же есть баг с рендерингом текстуры: если объект масштабируется, при этом происходит анимация вершин, и все это происходит за видом камеры, то текстуры не обновляются, и имеем обычный белый объект. Из всех 3-ёх 3D движков, Alternativa3D имеет самый «приятный» API и самую высокую производительность. Если разработчики еще добавят возможность использования DisplayObjectContainer как текстуры, то это будет самый лучший движек для создания Pure 3D Flash сайтов.

P.S.
Посвящается RSS Reader'ам.

this.prevFrame ()
 

Меню:
Twitter Updates:
    Архив:
    Управление:
    Flash & Flex знакомые: