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’ам.

Tips & Tricks 2

Опубликовано в: Опыт — Тэги: , , — Nicolas Prof @ 17:00

1. Быстрое получение значения после запятой.

Actionscript:
public function getDecimal($value : Number) : Number {
    return $value - ($value>> 0);
}

2. Что бы не было проблем с получением DisplayObject'а после использования myMovieClipHolder.gotoAndStop(). Используйте Event.ENTER_FRAME, до того как событие отработает один раз. Использование MovieClip распространено в многоязычных версиях сайтов, сделав лэйблы: ru, en, ua.

Actionscript:
private function onChangelanguage(e : Event) : void {
    if(_k> 0){
        this.removeEventListener(Event.ENTER_FRAME, onChangelanguage);
        registerMC();
    }
    _k++;
}

3. Являюсь ярым поклонником TweenLite разрабатываемого Jack Doyle. Не так давно, проект стал платформой для программной анимации, и легко расширяется плагинами. Я с вами поделюсь двумя плагинами, один из которых я использую в 40% всех программных анимаций - AutoDeletePlugin. ShortRadianRotationPlugin - позволяет работать с радианами, как это сделано в Alternativa 3D. AutoDeletePlugin - применяется только для DisplayObject. По завершению анимации, больше не нужно использовать onComplete, что бы удалить DisplayObject.

4. Быстрый и удобный, но не самый надежный способ убрать интерактивность с элементов интерфейса. Допустим есть некая форма, элементы которой содержатся в одном контейнере, пусть он будет называться formHolder.

Actionscript:
private function toggleForm($state : Boolean) : void {
    formHolder.mouseChildren = $state;
}

Главный минус такой реализации, что необходимо следить за теми элементами интерфейса, которые требуют игнорирования событий от мыши. К примеру лейблы на кнопках, если таких элементов нет, то можете использовать этот метод смело. Так же можно дать понять пользователю, что форма действительно неактивная, добавив одну строчку кода:

Actionscript:
private function toggleForm($state : Boolean) : void {
    formHolder.mouseChildren = $state;
    formHolder.alpha= ($state) ? 1 : 0.6;
}

5. Разрабатывая Pure AS3 проект, вы не сможете использовать «плюшку» Flash Player 10 для работы с текстом. Так как новый фреймворк для работы с текстом использует совсем другой тип встроенного текста, обычный встроенный текст в проекте имеет тип EMBEDDED, когда необходим EMBEDDED_CFF. Решить эту проблему сможет лишь новый Flex SDK 4 версии с расширенным метатэгом Embbed. Но учтите, шрифт будет встроен дважды.

12/06/2009

Необъятный Blur

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

Были ли у вас случаи, когда ограничения Flash не позволяли использовать фильтр?
Есть очень простой обходной путь. Если нам не разрешают применить фильтр к самому объекту, значит применим к его детям. Метод работает быстро, так как применение фильтра довольно таки быстрая операция. В этом можете убедиться в примере. Так же есть зависимость, что количество детей фильтруемого объекта прямо пропорционально кратности замедления процесса, т.е. если 100 детей, то время применения фильтра будет в 100 раз медленней. Вместо 10мс, будет 1сек при 10 000 итераций, согласитесь, что столько итераций в секунду в работающем проекте невозможно, так что у нас в запасе хорошие резервы, и мы вполне вольны использовать такую технику с каким либо Tween движком.

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

P.S.
Кнопка Broke Holder, изменяет габариты спрайта на 5000 рх.

03/06/2009

Tips & Tricks 1

Опубликовано в: Опыт — Тэги: , , , — Nicolas Prof @ 19:17

Как и ранее обещал, начинаю рубрику полезных советов, наблюдений и уклонов от граблей. Поехали.

  1. Есть форма построенная на собственной разработки UI компонентах, очень любимых нами, или может даже с помощью стандартных компонентов, которые кстати очень даже качественно написаны. И при отправке формы, или при каких либо других действиях требующих от нас временного блокирования формы кто то возможно попробует перебрать список UI компонентов, и если это наши компоненты вызвать некий метод ui.active = false, или если стандартные, то ui.enabled = false. Но такая операция трудоемкая, совсем никому не нужный лишний цикл, плюс ко всему ошибки, если форма сложная, то еще и проверки. Так вот, делать это все не надо, потому как есть намного изящный и на порядок более быстрый подход, а так же из-за простоты реализации еще и снижающий вероятность ошибки. Для блокировки форм, и любых других интерактивных объектов, лучше всего использоваться Sprite. Если необходимо показать какое то модальное окно, то просто добавляем на Stage, наш блокирующий слой, у меня как правило он называется незамысловато _blockLayer. Блокирующий слой заливается посредством Graphics любым цветом с полной прозрачностью и не одно MouseEvent событие не пройдет сквозь блокирующий слой. А еще более быстрый способ, это не использовать Alpha, а использовать BlendMode. Так же закрашиваем блокирующий слой черным (кто не знает, это 0 или умнее 0х000000), и ставим _blockLayer.blendMode = BlendMode.ERASE.
  2. Отдавайте предпочтение маскам реализованным за счет Rectangle, т.е. anyDisObject.scrollRect = new Rectangle(0,0,100,50). Но не забывайте, для премущества от ScrollRect необходимо маскируемый объект кэшировать как изображение cacheAsBitmap = true. Есть несколько неудобств при использовании ScrollRect - при перемещении, необходимо постоянно обновлять прямоугольник anyDisObject.scrollRect = _dynamicRectangleRef, ну и естественно, что бы не создавать каждый раз новый объект, правильно изначально создать Rectangle, и менять нужные нам параметры: x, y, width, height.
  3. Перед удаление объекта с Display List, сделайте объект невидимым, objToDelete.visible = false. Освободите немного памяти, которой всегда нехватает.
  4. Если ссылке на объект типа Sound назначить null, то тяжелый объект будет сразу высвобожден с памяти.

07/05/2009

Hi, my name is Nicolasprof.com

Опубликовано в: Новости — Тэги: — Nicolas Prof @ 22:17

Произошли большие изменения, я покинул старый и бесплатный домен nicolas.org.ua, и приобрел nicolasprof.com. Теперь будет приятно организовывать иерархию пэкеджей. В связи с этим событием я готовлю PROFGallery 2.2 в которой многие вещи будут переписаны на более «правильный» лад, для более качественного и удобного сопровождения проекта, уже сейчас разрабатывается новый engine эффектов. Так же я создам новую категорию под названием «Опыт» в которой буду делиться опытом в тезисной форме, т.е. это не будут трактаты на пару страниц... После PROFGallery планирую плотно заняться PROFScript, и все же предоставить общественности релиз версию.

P.S.
Это сообщение было посвященно тем двум, трем людям, которые изредка посещают мой блог)

this.prevFrame ()
 

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