среда, 30 декабря 2009 г.

Создание MovieClip'a в коде

Итак, создаем наш MovieClip с именем MyClip (не путать Name и Instance Name, я имею ввиду Name), в библиотеке щелкаем правой кнопкой на созданном MovieClip-е, выбираем Properties. В появившемся окне есть галочка Export for ActionScript, отмечаем её, теперь в поле Class должно появиться MyClip. На этом дела со сценой закончены, код:

var mc:MovieClip = new MyClip();

понедельник, 21 декабря 2009 г.

Связь браузера с роликом или переменные "flashvars"

При интеграции ролика на страницу можно передать ему свои параметры в переменной flashvars. Например:

<embed src="/flashFile.swf" flashvars="p1=var1&p2=var2" />
Или:
<object><param name="flashvars" value="p1=var1&p2=var2" /></object>
Теперь в ролике можно получить значения соответствующих параметров, вот так:
var p1:String = root.loaderInfo.parameters.p1;
var p2:String = root.loaderInfo.parameters.p2;

пятница, 18 декабря 2009 г.

Tween не доигрывает до конца в ActionScript 3.0

Разрабатываю по работе флешку - карту Киева, естественно присутствуют эффекты увеличения, высветления, перемещения и для их реализации используется что-то типа:
var tween:Tween = new Tween(items[curItem], "alpha", Strong.easeOut, items[curItem].alpha, 0, 0.8, true);
И вот в чем дело, иногда анимация не доходит до конца и на карте например остается левый кусок с alpha = 0.1. Как не странно искать пришлось не долго... Проблема в том что AS3 ищет безхозные Tween-ы (а мои именно такие, т.к. являются локальными переменными) и убивает их (собирает мусор вобщем). Поэтому во избежание этого приспособился так:

//все анимации хранятся в словаре
private var tweens:Dictionary;

tweens = new Dictionary(false);

//создание анимации, установка обработчика конца проигрывания анимации и добавление её в словарь
var tween:Tween = new Tween(items[curItem], "alpha", Strong.easeOut, items[curItem].alpha, 0, 0.8, true);
tween.addEventListener(TweenEvent.MOTION_FINISH, tweenMotionFinish);
tweens[tween] = tween;

//когда анимация проиграна можно смело её удалять
private function tweenMotionFinish(e:TweenEvent):void
{
tweens[e.currentTarget] = null;
delete tweens[e.currentTarget];
}