PDA

Просмотр полной версии : Анимация: movie+alpha+blur все в AS 2.0.


blacks
02.06.2008, 08:33
Привет всем!
И снова вопрос! :blush:
Копался уже 4 дня, перебрал кучу примеров... но сдвиг не сильный. :clap:
(а вот изучать флеш с 0'ля как-то все времени нехватает :blush: )

В приаттаченном файле есть видео-пример(маленький swf) того что пытаюсь сделать.
Свиду все вроде просто... но вот что-то не получается :мда:
Злость берет....

Сценарий (Action Script 2.0):
0.
- mc двигается с права налево с постоянной скоростью. все три части. после третьей переход на первый кадр и стоп.

1.
- первая часть: mc (alpha=0; blur=y10,x10) плавная анимация фильтра и альфы = mc (alpha=100; blur=y0,x0)

2.
- вторая часть: некоторое время при alpha=100; blur=y0,x0 mc продолжает двигаться.

3.
- третья часть: mc (alpha=100; blur=y0,x0) плавная анимация фильтра и альфы = mc (alpha=0; blur=y10,x10)

(таже первая часть только проигранная наоборот, правда ролик продолжает двигаться)
возможно может можно :blush: сделать "повтор" кода намации для фильтра альфы... но не наю правильно ли это...

Вот собственно и все.
Все делаеться как можно меньше размером.. поэтому и выбран AS

Ноно сделать без:
import mx.transitions.Tween;
import mx.transitions.easing.*;

(прибавляет весу)

После видео-примера прилагаю те варианты от которых отталкивался чтоб написать данный скрипт.
Также вот коды из тех примеров (чтоб не париться с скачкой и открыванием)

01.цикл.fla
import flash.filters.BlurFilter;

my_mc.filters = [new BlurFilter()];
var dir:Number = 1;
my_mc.blur = 10;my_mc.onEnterFrame = function() {
my_mc.blur += dir;
if ((my_mc.blur >= 30) || (my_mc.blur <= 10)) {
dir *= -1;
}
var filter_array:Array = my_mc.filters;
filter_array[0].blurX = my_mc.blur;
filter_array[0].blurY = my_mc.blur;
my_mc.filters = filter_array;
};

02.red_dot.flv

import flash.filters.BlurFilter;

var targetX:Number = 200;
var velocity:Number = 20;
var distanceX:Number;
var movementX:Number;
var blurAmount:Number = 10;
var blur = new BlurFilter(blurAmount, blurAmount, 1);

blurAmount = 10;
// mc._x = 200;

mc.filters = [];
mc.onEnterFrame = function():Void {
blurAmount-=0.1;
blur.blurX = blur.blurY=blurAmount;
mc.filters = [blur];
distanceX = targetX-this._x;
movementX = distanceX/velocity;
this._x += movementX;

if (Math.abs(this._x-targetX)<1) {
blurAmount+=0.5;
mc.filters = [blur];
distanceX = targetX-this._x;
movementX = distanceX/velocity;
this._x += movementX;

}
// delete this.onEnterFrame;

};



03.без_остановки.fla

import flash.filters.BlurFilter;
my_mc.filters = [new BlurFilter()];

var dir:Number = 1;
my_mc.blur = 10;


my_mc.onEnterFrame = function() {
my_mc.blur -= dir;
if (my_mc.blur <= -1) {
dir *= -1;
}

var filter_array:Array = my_mc.filters;
filter_array[0].blurX = my_mc.blur;
filter_array[0].blurY = my_mc.blur;
my_mc.filters = filter_array;
};

04.самое_простое.fla

import flash.filters.BlurFilter;
var gf:BlurFilter = new BlurFilter(10, 10, 3);

this._x = 20.4
this._y = 20
this._alpha = 0;

this.filters = [gf];

this.onEnterFrame = function() {
if (gf.blurX > 0) {
gf.blurX-=1;
gf.blurY-=1;
}
if(this._alpha<100){
this._alpha+=5;
}

this.filters = [gf];
};


Ребятушки помогите если не сложно!
СПАСИБО!

Psycho Tiger
02.06.2008, 11:19
А что конкретно у вас не получается?
Я прошелся поиском по всему вашему посту - искал знак "?". Так и не нашел.
Выкладываение "хочу получить вот это" больше относиться к разделу вакансий.
Поставьте четко вопрос, чтобы на него можно было ответить. Спасибо.

Alex_beginner
02.06.2008, 13:44
Psycho Tiger! Вы же видите, у человека что-то неполучается, т.е он незнает в какой части кода и как происходит сбой и просит о помощи.
Давайте лучше подумаем где все таки сбой или баг!

blacks! Пожалуйста, если возможно залейте исходник в формате Flash8, а то я посмотреть хочу кто такой gf, my_mc итд.

blacks
02.06.2008, 18:46
Psycho Tiger! Вы же видите, у человека что-то неполучается, т.е он незнает в какой части кода и как происходит сбой и просит о помощи.
Давайте лучше подумаем где все таки сбой или баг!

blacks! Пожалуйста, если возможно залейте исходник в формате Flash8, а то я посмотреть хочу кто такой gf, my_mc итд.

Спасибо Alex_beginner!
Примеры же есть в аттаче к посту - example.zip :rolleyes:

Alex_beginner
02.06.2008, 19:44
Неее! Вы меня не поняли. Я знаю что в аттаче есть, проблема с форматом файлов - Вы делали его в Adobe CS3, а у меня Flash8 , и у меня не открываются файлы.

Vektor
02.06.2008, 22:16
Alex_beginner- Почему не переходите на CS3?

etc
02.06.2008, 23:22
Alex_beginner- Почему не переходите на CS3?
На то это у многих есть ряд объективных причин, но эта тема не подходит для выяснения данного вопроса, особенно, когда есть возможность пересохранить под восьмую версию.

blacks
03.06.2008, 13:25
Ок сорри :rolleyes: - сразу не понял.
Воть:

Alex_beginner
03.06.2008, 18:04
blacks! Все же я немогу "въехать" в проблему.
Давайте попробуем наводящими вопросами разобраться.
1. Что представляют собой сценарии, единое целое, выполняющееся одновременно или же цепочка последовательных действий;
2. Если все сценарии НЕ единое целое, необходимо распределить их во времени и пространстве, т.е точно знать в какой момент времени должен поменяться blurX, например. Так же нужно знать при каком значении X это должно быть произведено.
3. Теперь если это единое целое, нужно знать граничные условия Xначала_движения, Yначала_движения, X конца_движения, Yконца_движения.

p.s. Лучше все процессы, то бишь движение, блюр, альфа-блендинг итд сделать в совокупности, во избежании путаницы и неработоспособности кода.

blacks
03.06.2008, 19:53
Дя вроде неплохой сценарий был.... :rolleyes:
и в SWF ролике вроде все видно...

весь сценарий написан в одном кадре клипа mc, в AS 2.0
в этом клипе на одном слое объект на втором сценарий.

по сценарию:
1. объект с самого начала мувика движеться только по горизонтали с постоянной скоростью
на расстояние допустим в 200 пикселей справа на лево.
Изначально у обьекта alpha=0%, blur=10(по Y и X).

2. в первые 2сек: анимация обьекта
из - alpha=0%, blur=10(по Y и X)
в - alpha=100%, blur=0(по Y и X)

3. след 2 сек объект просто продолжает двигаться.

4. последнии 2сек: анимация обьекта
из - alpha=100%, blur=0(по Y и X)
в - alpha=0%, blur=10(по Y и X)

5. стоп / переход на первый кадр и стоп

Вот вроде и все... вроде просто да вот не сделать...:wacko:

Alex_beginner
03.06.2008, 20:40
Во! Вот щас Вы рассказали просто СУПЕР! Все точно и ясно.
Ща буду трудиться. Вопрос такой когда Вам это нужно?

blacks
03.06.2008, 20:50
Ого сколько этузиазма... :rolleyes:
Прям не по себе стало - стыдновато...
Да особо не горит... после 3х днех безрезультатных мытарств совсем что-то расстроился :wacko:... как получиться.... по возможности...

СПАСИБИЩЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vektor
04.06.2008, 01:39
В исходниках не нашел циклического движения.
Вот пример.
this.attachMovie("mc","mc1",this.getNextHighestDepth(),{_x:300, _y:200});
var f:Number = -1;
var G:Number = 300;
changeStr = function () {
updateAfterEvent();
mc1._x += f;
if (mc1._x<=50) {
mc1._x = G;
}
};
setInterval(changeStr,10);

blacks
04.06.2008, 09:36
В исходниках не нашел циклического движения.
Вот пример.
Спасибо. Примерчик полезный. Но пока так и не понял как в него все разом засунуть :umnik2: - блюры, альфы...

Alex_beginner
04.06.2008, 21:08
Уважаемый Blacks!
Не мог выйдти раньше на связь - Интернет заглючил (WI-FI).

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

import flash.filters.BlurFilter;

//Задаем начальную и конечную координату движения мува
var begX:Number = 400;
var endX:Number = 200;
//Задаем начальное и конечное время первой фазы (в миллисекундах)
var begTime_1:Number = 0;
var endTime_1:Number = 2000;
//Задаем начальное и конечное время второй фазы (в миллисекундах)
var begTime_2:Number = 2000;
var endTime_2:Number = 4000;
//Задаем начальные и конечное время третьей фазы (в миллисекундах)
var begTime_3:Number = 4000;
var endTime_3:Number = 6000;
//Задаем качество Блюра
var quality:Number = 2;
//Рассчитываем уравнение линейного движения мува в зависимости от времени (т.е. X от Time)
//Тангенс угла наклона прямой
var k0:Number = (endX-begX)/(endTime_3-begTime_1);
//Свободный член (не половой, повторяю не половой 8-))
var b0:Number = begX-k0*begTime_1;
//--------------------------------------------------------------
//фаза 1
//--------------------------------------------------------------
//Задаем начальные и конечные значения блюра 1 фазы
var begBlur_1:Number = 10;
var endBlur_1:Number = 0;
//Рассчитывем линейные коэффициенты уравнений изменения Блюра
//Тангенс угла наклона прямой
var k1:Number = (endBlur_1-begBlur_1)/(endTime_1-begTime_1);
//Свободный член (что это Вы уже знаете)
var b1:Number = begBlur_1-k1*begTime_1;
//Задаем начальные и конечные значения альфы
var begAlpha_1:Number = 0;
var endAlpha_1:Number = 100;
//Рассчитывем линейные коэффициенты уравнений изменения альфы
//Тангенс угла наклона прямой
var k2:Number = (endAlpha_1-begAlpha_1)/(endTime_1-begTime_1);
//Свободный член
var b2:Number = begAlpha_1-k2*begTime_1;
//--------------------------------------------------------------
//фаза 3
//--------------------------------------------------------------
//Задаем начальные и конечные значения блюра 3 фазы
var begBlur_3:Number = 0;
var endBlur_3:Number = 10;
//Рассчитывем линейные коэффициенты уравнений изменения Блюра
//Тангенс угла наклона прямой
var k3:Number = (endBlur_3-begBlur_3)/(endTime_3-begTime_3);
//Свободный член (что это Вы уже знаете)
var b3:Number = begBlur_3-k3*begTime_3;
//Задаем начальные и конечные значения альфы
var begAlpha_3:Number = 100;
var endAlpha_3:Number = 0;
//Рассчитывем линейные коэффициенты уравнений изменения альфы
//Тангенс угла наклона прямой
var k4:Number = (endAlpha_3-begAlpha_3)/(endTime_3-begTime_3);
//Свободный член
var b4:Number = begAlpha_3-k4*begTime_3;



var filter:BlurFilter = new BlurFilter(begBlur_1, begBlur_1, quality);//Создаем Блюр фильтр. 1- качество
var filter_array:Array = [filter];
mc.filters = filter_array;
var newTime:Number = null;

this.onEnterFrame = function():Void
{
newTime = getTimer();
mc._x = k0*newTime+b0;
if ((newTime>=begTime_1)&&(newTime<endTime_1))
{
setBlurParams(mc,k1*newTime+b1);
mc._alpha = k2*newTime+b2;
}
if ((newTime>=begTime_3)&&(newTime<endTime_3))
{
setBlurParams(mc,k3*newTime+b3);
mc._alpha = k4*newTime+b4;
}
if (newTime>=endTime_3) {delete this.onEnterFrame;};
}

function setBlurParams(mc:MovieClip, blur:Number):Void
{
var filter_array = [];
filter_array = mc.filters;
filter_array[0].blurX = filter_array[0].blurY = blur;
mc.filters = filter_array;
delete filter_array;
}

В коде нет 2 фазы, т.е. она не контролируется, поскольку в ней не происходит ни каких изменений. Но если Вы захотите в этой фазе, что-либо менять, Вы можете сделать это по примеру 1 или 3 фазы.
Скорость движения, изменения блюра, альфы, все определяется блоком данных, с моими комментариями. Если что непонятно обращаейтесь. И еще я не стал делать переход на первый кадр (п.5 Вашего сценария). Я думаю Вы сможете сделать это и без моей помощи.

Исходник прилагается.

В исходнике код расположен на слое mc. Если Вам нужно разместить его на другом слое, например, actions, я думаю Вы это сделаете без труда.

Всего доброго!

Vektor
05.06.2008, 03:51
Alex_beginner - Попробуйте свой код зациклить.
Я думал это будет не сложно, но как не прискорбно это звучит не смог этого сделать.
Кто ни будь, может это сделать, хотелось бы посмотреть, где не хватило моей логики или знаний.
Если бы, делал сам, делал по-другому и нашел бы решение данной задачи.
Но хочется посмотреть на решения этой задачи.
С уважением Vektor.

P.S. Кстати я вспомнил, как работает getTimer().
Вопрос: можно ли не убирая getTimer(), решить эту проблему.
Ответ: Мне кажется что нельзя.

Wolsh
05.06.2008, 08:21
Непонятно нафиг вообще нужен таймер, если по сценарию:
1. объект с самого начала мувика движеться только по горизонтали с постоянной скоростью
на расстояние допустим в 200 пикселей справа на лево.Т.е. что Вы пиксели считаете, что время - для деления на фазы всеравно. Сказать "объект на 150-м пикселе" здесь всеравно что "объект на пятой секунде полета".

Alex_beginner
05.06.2008, 09:47
Wolsh! Не пиксели, а время!!! В последнем сценарии Blacks'a это прописано. Мув должен переместиться в 200 пикселей с лево на право за 6 секунд. Если Вы будете делить фазы в соотвествии с пространственными измерениями, то нет гарантии, что Вы достигнете 200 пиксельной отметки именно за 6 секунд.

Vektor!
На счет getTimer полностью с Вами согласен. Здесь как говориться пространственно-временной континиум 8-).
На счет зацикливания, я невидел в последнем сценарии Black'a зацикливания. Там есть пункт 5 - стоп/переход на первй кадр и стоп.
Вообще то мне это непонятно - два стопа, один переход )).

С Уважением,
Alex_beginner

Wolsh
05.06.2008, 11:31
Wolsh! Не пиксели, а время!!!
Еще раз: без разницы. А если у Вас есть разница, значит код неверный.
И не надо цепляться к словам заказчика. Он может мерить проект хоть в попугаях.
Но сказано точно : см. ТЗ пункт 1. Если Вы считаете, что заказчику нужно не это...

Alex_beginner
05.06.2008, 11:45
Wolsh!
Цитата Black'а:

1. объект с самого начала мувика движеться только по горизонтали с постоянной скоростью
на расстояние допустим в 200 пикселей справа на лево.
Изначально у обьекта alpha=0%, blur=10(по Y и X).

2. в первые 2сек: анимация обьекта
из - alpha=0%, blur=10(по Y и X)
в - alpha=100%, blur=0(по Y и X)

3. след 2 сек объект просто продолжает двигаться.

4. последнии 2сек: анимация обьекта
из - alpha=100%, blur=0(по Y и X)
в - alpha=0%, blur=10(по Y и X)

5. стоп / переход на первый кадр и стоп

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

Wolsh
05.06.2008, 11:53
1. Заказчик уже сказал свое мнение. И помощь Вашу оценил.
2. Вы пытаетесь оспорить законы физики? Давайте не на этом форуме?

Alex_beginner
05.06.2008, 12:03
1. Где Вы видете, что он оценил мою помощь? Покажите пост.
2. Законы физики!!!!! О чем Вы говорите. Физика здесь не причем.
Объясню на примере. Есть расстояние 200 пикселей, Вам необходимо преодолеть это расстояние за шесть секунд в три этапа. Длительность каждого этапа не больше не меньше -2 секунды. Как Вы собираетесь преодолеть это расстояние, но так чтобы выполнились все условия забега?! Вы вынуждены привязать все переходы с этапа на этап ко времени.

Wolsh
05.06.2008, 12:11
Учебник для 4 класса возьмите.

Alex_beginner
05.06.2008, 12:19
Я еще раз повторю, что физика здесь не причем. Здесь только здравый смысл!
Кроме того физику, худо, бедно я знаю и не надо мне советовать читать учебники для 4 класса. Вы правильно сказали, что если Вы хотите побеседовать на счет физики давайте перейдем на другой форум. Вот там и поговорим на счет квантовой механики, уравнения Шредингера, траекторий заряженных частиц в синхрофазатроне итд.
И потом, мне надоело с Вами препираться. Если Вы хотите предложить что-то дельное -выкладывайте готовый example, а не обсуждайте требования Заказчика на предмет несостоятельности его заказа.

blacks
05.06.2008, 13:37
Alex_beginner
Огромное Вам спасибо!!!
Сегодня удалось мельком посмотреть результат Вашей работы - он меня поразил!
СПАСИБО!

На данный момент есть некая нехватка времени чтоб разобрать программу и приладить ее к тому что делаю... задержки на 1-3дня. Как только доберусь сразу Вам отпишусь (пост/личка!?)

Что по поводу геометрии и физики... эх подзабыл я это ;)
И посмотрев код программы понял что чтоб такое состряпать у меня ушлиб месяцы.
Поэтому спор по поводу правильности кода мне немного не понятен (даже суть спора) ибо результат меня ОЧЕНЬ обрадовал.. а вот правильный он или нет пока мне неочень интересно... размер "выхода" маленький, сценарий работает... все просто замечательно!!!

СПАСИБИЩЕ!!!!

Alex_beginner
05.06.2008, 13:51
И посмотрев код программы понял что чтоб такое состряпать у меня ушлиб месяцы.
Нестоит себя унижать! Дело тут в наличие свободного времени. Да и практики немножко не помешает.
А то, что касается спора с Wolsh! Wolsh просто не понял, что желание Заказчика - закон. Раз Заказчик пожелал, чтобы фазы - движения и блюра (а также альфы) были распределены во-времени, так значит нужно так и делать. А то он счел необходимым привязать все к абсциссе (пространственное измерение) и преподал это как вариант который я не смог реализовать. Просто смех и грех. Я, конечно новичок, но такие вещи я уже умею делать. Вопрос нужно ли это Заказчику.

Psycho Tiger
05.06.2008, 14:13
Тут я согласен с Wolsh`eм. Приведу пример:
Заказчик просит предоставить программу для решения квадратного уравнения (обычного, ax^2+bx+c) графически.
Как мы это делаем? Находим корни уравнения и строим параболу - вот так работает программа. Это было бы наиболее быстро и правильно. Но как мы это делаем в жизни? Строим параболу и уже там ищем корни. И что быстрее для процесора? Сравнивать где то каждую точку с 0 - а вдруг равна? Или же изначально решить все... ну, скажем гаусом (сам не умею им пользоваться ;))
А что скажет заказчик? В любом случае программа будет работать, но при 1 варианте она будет работать в разы быстрее, за что г-н заказчик нас погладит по головке.

Alex_beginner
05.06.2008, 14:42
Tiger! Ваша мысль понятна. Но я предоставил Заказчику (а Он разбирается в ActionScript, пусть даже и немного) выбор либо делать это исходя из пространственных координат или использовать время - иногда время критично.
Он выбрал время. Поэтому я счел дальнейшее обсуждение "заказа" не целесообразным. Да, возможно, нужно было бы сделать второй вариант (с пространственными координатами), но это я предложил Wolsh, но он, видимо, счел это выше его интересов и проигнорировал предложение. Кстати, его обвинения по поводу знания мною физики за 4 класс, необоснованно и оскорбительно. Считаю, подобное поведение недопустимым в цивилизованном форуме в том случае, если эти "высказывания" не подтверждаются вескими аргументами.

Wolsh
05.06.2008, 15:11
Alex_beginner, перестаньте хамить. Некоторые работают на работе))))
Вот я воспользовался перекуром))))
Да, простите, я там ошибся по поводу мнения заказчика, это был пост Vectorа)))

Alex_beginner
05.06.2008, 16:25
Wolsh! При всем уважении к Вам, я все же хочу сказать. Во-первых, я и не думал хамить Вам. Это Вы высказали мнение, что мне нужно читать учебник для 4 -го класса.
Если же я чем -то обидел Вас, то прошу извинить меня, но говорить что у меня такой уровень знаний физики весьма унизительно для меня.

Во-вторых, если Вы думаете, что я не работаю, то Вы ошибаетесь. Мне 33 года и я уже давно и плодотворно работаю, однако, нахожу время посещать форум Flasher.ru, считая его одним из самых передовых в Интернете.

Пользуясь случаем, хочу поблагодарить адиминистрацию форума и его беспристрастных и всезнающих модераторов за то, что предоставили нам возможность общаться, делиться опытом, утолять жажду ищущих.

etc
05.06.2008, 16:28
желание Заказчика - закон.
Это не аксиома и не закон. Желание заказчика остается его именно его желанием.

Alex_beginner
05.06.2008, 16:45
__etc! Возможно я слишком утрировал. Но представьте, уважаемый __etc, если мы начнем, кажого ищущего ответа "пинать", указывая, что его желание несовершенно, во что превратиться форум. Он превратиться в сбор злобных флешеров, которым нет дела до дела, прошу простить меня за тафтологию, а есть дело только до доказательства своей правоты просящему помощи. Хотя она, эта правота, остается еще под вопросом.

iNils
05.06.2008, 16:55
Моя версия. Основной функционал в классах. См. аттач.
import ru.inils.transitions.Counter;
import ru.inils.framework.Delegate;
import flash.filters.BlurFilter;
////
//// общее число кадров
var countFrame:Number = 220;
//// скорость в кадре
var speedofFrame:Number = 1;
//// движки
var count0:Counter = new Counter (0, 100, (countFrame / 3) >> 0, 0);
var count1:Counter = new Counter (0, 100, (countFrame / 3) >> 0, (countFrame / 3) >> 0);
var count2:Counter = new Counter (100, 0, (countFrame / 3) >> 0, (countFrame * 2 / 3) >> 0);
//// события движка
count0.onCountChanged = Delegate.create (this, move, [0, count0]);
count1.onCountChanged = Delegate.create (this, move, [1, count1]);
count2.onCountChanged = Delegate.create (this, move, [2, count2]);
////
function move (id:Number, count:Counter) {
mc._x += speedofFrame;
switch (id) {
case 0 :
var blur:Number = 10 - count.value / 10;
var filter:BlurFilter = new BlurFilter (blur, blur, 3);
mc.filters = [filter];
mc._alpha = count.value;
break;
case 2 :
var blur:Number = 10 - count.value / 10;
var filter:BlurFilter = new BlurFilter (blur, blur, 3);
mc.filters = [filter];
mc._alpha = count.value;
break;
}
}
mc._alpha = 0;

желание Заказчика - закон.Заказчик как правило "дурак". В том плане, что он знает, что хочет и в тоже время не понимает о чем говорит.
То что он там написал "секунды" ни о чем не говорит (понятия времени у людей абстракное, и те 2 секуныд потом превращаются "а чего так медленно? я же две секунды просил"). Он мог также попросить сделать флешку на пару сантиметров длиннее.

Alex_beginner
05.06.2008, 17:10
iNils! Прочитайте первый пост Заказчика.
Все делаеться как можно меньше размером.. поэтому и выбран AS
Ноно сделать без:
Код:
import mx.transitions.Tween;
import mx.transitions.easing.*;
(прибавляет весу)

Да и зачем, если все проще делается.
А у меня прога получилась длинная потому, что я все расписывал (каждую переменную итд) да и комментировал.

Не нужны тут mx.transitions.*.
Ну а если Вы считаете что нужны, давайте предоставим возможность судить наши проги Заказчику. Кстати это правильно, на мой взгляд, потому что у Заказчика должно быть право выбирать.

iNils
05.06.2008, 17:20
Не нужны тут mx.transitions.*.А где вы его увидели?
потому что у Заказчика должно быть право выбирать.Заказчика платит деньги.

Alex_beginner
05.06.2008, 17:23
ААА! Простите неразглядел, это Ваши эксклюзивные классы.
Но однако, вопрос выбора Заказчика не снимается. Пусть у него будет два варианта решения этой простой проблемы, я думаю он будет доволен.))

Теперь давайте подробно разберем вот это:
Заказчик как правило "дурак". В том плане, что он знает, что хочет и в тоже время не понимает о чем говорит.
То что он там написал "секунды" ни о чем не говорит (понятия времени у людей абстракное, и те 2 секуныд потом превращаются "а чего так медленно? я же две секунды просил"). Он мог также попросить сделать флешку на пару сантиметров длиннее.

1. Заказчик точно знает, чего он хочет, но незнает как это выразить. Не "не понимает о чем говорит", а именно не понимает как выразить то, что он хочет. Наша с Вами задачи попытаться понять чего он хочет, а после дать понять Заказчику чего он хочет. Что я и сделал, перейдя к наводящим вопросам.
2. Временные отметки в моей программе можно менять, поэтому вопрос
понятия времени у людей абстракное, и те 2 секуныд потом превращаются "а чего так медленно? я же две секунды просил" не актуален. Прогу можно настроить под свои вкусы.
3. Спорьте с Заказчиком по вопросу его желаний, а не со мной. Не думаю, что после первого нашего "упрямства" он захочет вести дальнейший диалог.:D

iNils
05.06.2008, 17:28
Пусть у него будет два варианта решения этой простой проблемыТри, еще Wolsh писал.

Alex_beginner
05.06.2008, 17:39
А где Wolsh писал?? Пост покажите.

iNils
05.06.2008, 17:40
http://www.flasher.ru/forum/showpost.php?p=743851&postcount=29

Alex_beginner
05.06.2008, 17:43
Да есть такой! Видимо он добавил его позже. Потому, как я его не видел.
Кстати, iNils, а что Вы код в "case" не выделили в отдельную функцию. Ведь, он абсолютно идентичный :taunt::D.
А может, тогда и switch-case не нужен.:D:taunt:

Wolsh
06.06.2008, 16:22
Апгрейд кода)))
import flash.filters.BlurFilter;
// исходные настройки
var blurmax:Number = 30;
var xmax:Number = 300;
var xmin:Number = 100;
// константы
var way:Number = xmax-xmin
// поехали
mc._x = xmin;
mc.onEnterFrame = function() {
this._x += 1;
if (this._x>=xmax) this._x = xmin;
this._alpha = 3*(way/2 - Math.abs(way/2-this._x+xmin));
blurnow = blurmax - (way/2-Math.abs(way/2-this._x+xmin))/2;
this.filters = [new BlurFilter(blurnow, blurnow, 3)];
};

blacks
09.06.2008, 17:39
Сегодня сел за разбор скрипта и приаттачивания его к проекту.

Alex_beginner
Огромное спасибо за поддержку и помощь!
Думаю Ваш пример сослужит добрую помощь еще не оди раз!

iNils
к сожалению классы которые аттачатся к скрипту добавили ему веса:
выходной swf весит за 2кб. Остальные примеры в пределах 400-500байт

Wolsh
Спасибо за ваш пример в посте/посте:
http://www.flasher.ru/forum/showpost.php?p=744090&postcount=41
- он получился по выходу swf самым маленьким.

Хотя забавная штука - сам ролик уменьшился всего на 1кб :eek:

Ню так суть не в этом.
Вот подумал что хорошоб добавить анимацию цвета для данного мувика.

Сценарий:
1 = 2 секунды - из красного в белый
2 = 2 секунды - сохраняем белый
3 = 2 секунды - из белого в красный

Полазил в зарубежных сайтах и на данном форуме
Много примеров с
import flash.geom.ColorTransform;
import flash.geom.Transform;
но нуно сделать без этого :(

Смотрел сылочку:
http://etcs.ru/blog/as2/ru/etcs/draw/simplegradient/
(ru.etcs.draw.SimpleGradient v1.1.1)
- но там мне кажеться вывод будет тоже большим
(:rolleyes: еще не смотрел-проверял.. но классы думаю что-то да весят)

Плюсом на форуме нашел пост от wvxvw
(http://www.flasher.ru/forum/showpost.php?p=603981&postcount=9)
var _null:Number = 0x000000;
_root.onEnterFrame = function() {
_null += 0x01;
trace(_null);
}
- вроде жто то что должно подойти под Ваш пример...
- но к сожалению мои ламерские подвиги в флеше пока не растут :rolleyes:

Вот хотел у Вас попросить помощи.
Заранее большое СПАСИБО!

iNils
09.06.2008, 17:44
iNils
к сожалению классы которые аттачатся к скрипту добавили ему веса:
выходной swf весит за 2кб. Остальные примеры в пределах 400-500байтЕсли у вас баннер, то это конечно критично, в иных случаях 2кб роли не играют.

Wolsh
09.06.2008, 19:15
Хм.... Это очень простое цветовое преобразование. Для частного случая:
import flash.filters.BlurFilter;
// исходные настройки
var blurmax:Number = 30;
var xmax:Number = 300;
var xmin:Number = 100;
// константы
var col:Color = new Color(mc);
var way:Number = xmax-xmin
// поехали
mc._x = xmin;
mc.onEnterFrame = function() {
this._x += 1;
if (this._x>=xmax) this._x = xmin;
var delt = way/2 - Math.abs(way/2-this._x+xmin)
this._alpha = delt*3;
blurnow = blurmax - delt/2;
this.filters = [new BlurFilter(blurnow, blurnow, 3)];
var temp:Number = Math.min(255, Math.floor(this._alpha));
col.setRGB(255 << 16 | temp << 8 | temp)
};Попутно выяснилось, что все остальное тоже для частного случая)))) Прошу прощения у мэтров, давших универсальное решение.

blacks
09.06.2008, 21:22
Если у вас баннер, то это конечно критично, в иных случаях 2кб роли не играют.

Согласен...
У меня вот меню на флеше в шапке сайта - нужно сделать красиво и маленько по размеру :rolleyes:


Попутно выяснилось, что все остальное тоже для частного случая)))) Прошу прощения у мэтров, давших универсальное решение.
- Спасибо! Хотя еще не удалось проверить :rolleyes:
- Только вот не понимаю за "прощение" - что-то не то с кодом?

iNils
09.06.2008, 21:29
Согласен...
У меня вот меню на флеше в шапке сайта - нужно сделать красиво и маленько по размеру :rolleyes:
У меня аватар весит 3кб, а у Волша все 16. Посмотрите на размер ваших картинок на сайте и сам html.

Wolsh
09.06.2008, 21:56
что-то не то с кодом?Этот сокращенный код нормально работает при тех размерах что там вбиты и с максимальным блюром 30. Для других случаев придется подбирать множители-делители))) Я обманулся насчет универсальности полученной формулы. К тому же там сделаны непростительные допущения - типа что альфа не может быть больше ста (точнее может но визуально не выражается) а блюр не может быть меньше ноля. В общем все это проявится, если захочется меньше блюра или длиннее путь.
зЫ У меня аватар в 32 битном пинге, а у iNilsa - джипег с хитрым синим фоном (самый неискажаемый в джипеге цвет, первые биты)

blacks
10.06.2008, 00:56
У меня аватар весит 3кб, а у Волша все 16. Посмотрите на размер ваших картинок на сайте и сам html.

:)
Борьба аватрками :yahoo:
Сайт и картики да... местами большие. Но нуно постепенно править, уменьшать, совершенствоваться. Спасибо!


Этот сокращенный код нормально работает при тех размерах что там вбиты и с максимальным блюром 30. Для других случаев придется подбирать множители-делители))) Я обманулся насчет универсальности полученной формулы. К тому же там сделаны непростительные допущения - типа что альфа не может быть больше ста (точнее может но визуально не выражается) а блюр не может быть меньше ноля. В общем все это проявится, если захочется меньше блюра или длиннее путь.
зЫ У меня аватар в 32 битном пинге, а у iNilsa - джипег с хитрым синим фоном (самый неискажаемый в джипеге цвет, первые биты)


Блюр сейчас у меня стоит 10... максимум будет 20.
Расстояние и скорость уменьшил.
Вообщем в таком виде живу :rolleyes:

Про хитрый JPEG не знал - наверное это азы?
(сразу захотелось использовать "синенький" в дизайне с большими картинками):rolleyes:

blacks
10.06.2008, 02:01
Хм.... Это очень простое цветовое преобразование. Для частного случая:

// константы
var col:Color = new Color(mc);
// поехали
var temp:Number = Math.min(255, Math.floor(this._alpha));
col.setRGB(255 << 16 | temp << 8 | temp)
};
Попутно выяснилось, что все остальное тоже для частного случая)))) Прошу прощения у мэтров, давших универсальное решение.

Вот сижу разбираю ваш пример и никак не могу понять:
- как задавать/изменять цвета?
:wacko:

Пытаюсь сделать:
#663399 -> whie -> #663399

Wolsh
10.06.2008, 08:41
blacks, Вы запутались в своих желаниях! С одной стороны, Вы хотите все оптимизировать до одной строчки, с другой стороны Вам надо чтоб этот код был универсальным. Универсальный код уже написан - это классы. Поверьте, еслиб можно было универсальность както еще оптимизировать, наши глубокоуважаемые мэтры сделали бы это. Но увы.
Частный код всегда короче и производительней, так как содержит только необходимые в конкретном случае расчеты. Например, для преобразования из красного 0хff0000 в белый 0xffffff надо всеголишь поднимать значения зеленого и синего с 0 до 255, причем на одинаковую величину. Но для преобразования произвольного цвета в другой произвольный цвет понадобится код раз в десять увесистей.
Я бы рекомендовал такой подход в Вашем случае - создать "карту преобразований"
Звучит страшно, но я имею в виду совсем простую вещь - Вам надо создать преобразование некоторой переменной (назовем ее дельта) в известном Вам диапазоне, например от 0 до 100, и все остальные преобразования (блюра, альфы, цвета и т.п.) производить от величины этой переменной. Напр. когда дельта 100 - блюр 0, альфа 100 цвет 0xffffff, а когда дельта 0 - блюр 10, альфа 0, цвет 0x663399.
Таким образом, сначала создаете формулу, преобразующую позицию Х Вашего мувика в величину дельта, потом считает остальные параметры.

blacks
10.06.2008, 11:30
Ох :)
Нет это не по мне - к сожалению программирование для меня сложная штука.
Составление формул, циклов, переменных это что-то сверхестественное :)
Мнеб что попроще
Поэтому в дизайне и сижу ;)

iNils
10.06.2008, 13:37
Если брать за основу мой код, то это будет выглядить так (альфу пока закомментировал):
import ru.inils.transitions.Counter;
import ru.inils.framework.Delegate;
import flash.filters.BlurFilter;
////
//// общее число кадров
var countFrame:Number = 220;
//// скорость в кадре
var speedofFrame:Number = 1;
//// движки
var count0:Counter = new Counter (0, 100, (countFrame / 3) >> 0, 0);
var count1:Counter = new Counter (0, 100, (countFrame / 3) >> 0, (countFrame / 3) >> 0);
var count2:Counter = new Counter (100, 0, (countFrame / 3) >> 0 + 1, ((countFrame * 2 / 3) >> 0) + 1);
//// события движка
count0.onCountChanged = Delegate.create (this, move, [0, count0]);
count1.onCountChanged = Delegate.create (this, move, [1, count1]);
count2.onCountChanged = Delegate.create (this, move, [2, count2]);
var color:Color = new Color (mc);
////
function rgb (i:Number):Number {
var m:Number = (100 - i) / 100;
var r:Number = 0xFF - (0xFF - 0x66) * m;
var g:Number = 0xFF - (0xFF - 0x33) * m;
var b:Number = 0xFF - (0xFF - 0x99) * m;
return r << 16 | g << 8 | b;
}
function mode (i:Number):Void {
var blur:Number = 10 - count.value / 10;
var filter:BlurFilter = new BlurFilter (blur, blur, 3);
mc.filters = [filter];
//mc._alpha = i;
color.setRGB (rgb (i));
}
function move (id:Number, count:Counter) {
mc._x += speedofFrame;
switch (id) {
case 0 :
mode (count.value);
break;
case 1 :
break;
case 2 :
mode (count.value);
break;
}
}
color.setRGB (0x663399);
//mc._alpha = 0;

blacks
10.06.2008, 16:26
Если брать за основу мой код, то это будет выглядить так (альфу пока закомментировал):

Спасибо :rolleyes:
Но 2кб для меня критично :rolleyes:

blacks
10.06.2008, 16:29
blacks,Но для преобразования произвольного цвета в другой произвольный цвет понадобится код раз в десять увесистей.

Дя вот тут уже и задумался...
Стоит ли тогда делать такой большой код?
Тем более он будет продублирован 6-9 раз...

По поводу сценария... наверно я визуал - понимаю что добавить или отнять только когда вижу :)