Samoiloff blog

flash и flex технологии

MultiLoader

Всем приходилось сталкиваться с ситуацией загрузки нескольких ресурсов на этапе инициализации/работы приложения. При этом необходимо выводить общий прогресс и прогресс загрузки текущего элемента. Для этого и был написан данный класс. Возможно код покажется неидеальным, но я для удобства хотел реализовать все в одном файле. Пока что дополнительно реализована возможность указания ресурсов через xml. В будущем (когда у меня возникнет в этом необходимость) класс будет перерожден в полноценный прелодер с поддержкой swf-библиотек. В архиве содержится класс и примеры. MultiLoader

Пример использования:

package {
import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.events.Event;

import com.samoiloff.utils.MultiLoader;

import flash.display.MovieClip;

/**
* @author Samoiloff
*/

public class TestLoadByTask extends MovieClip {

private var multiLoader:MultiLoader;

public function TestLoadByTask() {
trace("test");
multiLoader = new MultiLoader();
multiLoader.addTask("xml/tracklist.xml", "trackListXML");
multiLoader.addTask("xml/skin.xml", "skinXML");
multiLoader.addTask("xml/settings.xml", "settingsXML");
multiLoader.addTask("img/skin.png", "skinImg", MultiLoader.MOVIE);
multiLoader.addEventListener(Event.COMPLETE, onComplete);
multiLoader.addEventListener(MultiLoader.ITEM_COMPLETE, onItemComplete);
multiLoader.addEventListener(ProgressEvent.PROGRESS, onProgress);
multiLoader.start();

}

private function onProgress(e:Event):void {
var multiLoader:MultiLoader = MultiLoader(e.target);
var i:int = multiLoader.currentIndex;
trace("Test.onProgress(); taskName =  " + multiLoader.getItemRegistrationName(i) + "; itemProgress = " + Math.floor(multiLoader.itemProgress*100) + "; totalProgress =  " + Math.floor(multiLoader.progress*100));
}

private function onItemComplete(e:Event):void {
var multiLoader:MultiLoader = MultiLoader(e.target);
var i:int = multiLoader.currentIndex;
trace("Test.onItemComplete(); taskName =  " + multiLoader.getItemRegistrationName(i));

}

private function onComplete(e:Event):void {
var multiLoader:MultiLoader = MultiLoader(e.target);
trace("Test.onComplete(); ");
}
}
}

Комментариев нет

Корректное отображение специальных символов (ö,ä,ü).

SpecialCharsProcessor - класс для замены специальных символов в виде: è é на è é , которые уже могут корректно отобразиться в текстовом поле.

Пример использования

var str:String = "testútest1 < étest3";
tf.htmlText = SpecialCharsProcessor.processString(str);
Комментариев нет

Alternativa Platform

1 июня Пермскими разработчиками выпущен новый движок Alternativa3 (который, к сожалению, нельзя использовать в коммерческих проектах). Идея пересекается с PaperVision, но, как утверждают разработчики, лучше. На сайте расположены демки - на которых можно видеть, как упрощаются полигоны для выигрыша производительности при перемещении камеры. Отличная работа, но воспользоваться видимо не получится, будем надеяться, что в скором будущем проект заопенсорсят (что на мой взгляд врядли произойдет).

Комментариев нет

Guttershark framework

Совсем недавно натолкнулся на интересный фреймворк, основная идея которого заключается в том, что любой сайт основан на следующей последовательности действий: 1. считать параметр из flashVars; 2. загрузить xml по заданному параметру; 3. распарсить xml; 4. инициализировать приложение на базе xml.

Для реализации этих действий (и не только) служит данный фреймворк.

http://www.guttershark.net/

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

Недостатоком является только использование для программной анимации библиотеки TweenMax (я привык работать с Tweener).

http://www.tweenmax.com/

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

PS: сырцы доступны только через svn отсюда http://code.google.com/p/guttershark/source/checkout. Кто не знаком, что это такое - это система контроля версий. Чтобы забрать файлы можете воспользаться этой программой (http://tortoisesvn.net/downloads). Встраивается в контекстное меню Windows. После установки - правой кнопкой по пустой папке->check out -> указать URL репозитория.

Комментариев нет

AS 2.0 класс для работы с xml

Может уже и не актуально, раньше в as2.0 для работы с xml я использовал собственный класс, который парсил xml в Object.

Нижеприведенный код выведет в Output следующую строку “<node attr=”attributeValue”>someText<childNode /></node>”:

var obj:Object = new Object();
obj.nodeName = "node";
obj.nodeValue = "someText";
obj.attr = "attributeValue";
obj.childNodes = new Array();
obj.childNodes.push({nodeName:"childNode"});

trace(OBJandXML.OBJtoXML(obj));

Если к полученному xml применить обратное образование OBJandXML.XMLtoOBJ() получится такой-же объект.

Основной недостаток - вы не можете в качестве аттрибутов использовать предопределенные свойства (”nodeName”, “nodeValue”, “childNodes”).

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

OBJandXML.as с примером

Комментарии (2)

Спартанский Scroll

Помню давным давно на AS2.0 был скролл, который было легко модифицировать в отличие от стандартного (да и весил по минимуму). В библиотеке fla-файла хранились битмапы, которые можно было за пару минут заменить при необходимости изменить дизайн скролла. Чтобы облегчить себе жизнь за пару часов этот скролл был воспроизведен, но уже на actionscript 3.0.

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

Если мой код кого-то вдохновит - здесь осталось только добавить функцию горизонтального положения и создать полноценный компонент через component definition (который бы можно было поместить на сцену, а не вызывать рантайм).

Буду очень признателен.

скачать скролл

Комментариев нет

Loader.unload()

Недавно меня удивил метод Loader.unload(). Необходимо было грузить отдельный мувик несколько раз с программной анимацией, ощутимой для процессора. При вызове removeChild сборщик мусора не убирает мувиклип из памяти, и как следствие он продолжает проигрываться и отжирать процессорное время. Даже если ссылок на объект, удаленный из дисплей листа не остается - сборщик мусора его заметит не сразу.

Варианты решения:

1. Принудительно вызвать error, чтобы сборщик мусора пробежался по переменным (был предложен etc на flasher.ru):

try {

trace(this["noProperty"] );

} catch (e:Error) {}

2. Использовать Loader.unload(). На котором я остановился, так как в моем случае он является более правильным.

Оказалось, что этот метод работает корректно только, когда мувик был полностью загружен. Если вызывать его в процессе загрузки мувика - ничего не произойдет (даже не вывалится ошибка). Поэтому правильной является следующая связка.

private function destroy () {

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.unload();

}

private function onComplete(e:Event) {
loader.unload();
}

Комментариев нет

Navigator

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

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

Пример использования (допустим, что надо показать попап поверх всего содержимого):

import com.samoiloff.navigator.Navigator;

var documentInstance:DocumentClass = DocumentClass(Navigator.getInstance(DocumentClass, this));

documentInstance.addChild(new Alert("Hello"));

Navigator

Комментариев нет

Мультиматограф-IV

IV фестиваль «Мультиматограф-IV» приглашает к участию!
http://www.multimatograf.ru/

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

«Мультиматограф» - это место встречи известных специалистов в области
компьютерного творчества, молодых авторов, которые делают первые шаги
в этом направлении, и зрителей. Идея фестиваля – предоставление
площадки для демонстрации своего творчества современным, динамичным и
креативно мыслящим (но не «раскрученным» еще) людям.

На конкурс принимаются работы некоммерческого характера, выполненные в
различных направлениях, в том числе: Flash, 2D-3D-анимация,
классическая и пластилиновая анимация, видеоклипы. Номинации:
«Мультфильм», «Клип», «Видео-арт», «Дичь».

Фестиваль пройдет в Вологде 28 и 29 марта 2008г. Гала-концерт и
награждение победителей состоится 29 марта в ОКЗ «Русский Дом».

Комментариев нет

MVC - паттерн

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

Хоть я и назвал его MVC (Model/View/Controller) (Модель/Вид/Контроллер) - по большому счету, в моем случае это скорее MV (Model/View), так как обычно функции контроллера я интегрирую во View и в код я его не включал, так как он в значительной степени разнится от исполняемой задачи.

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

MVC pattern source

Комментарии (3)

Следующая страница »