Мегаобучалка Главная | О нас | Обратная связь


Принципы разработки FLASH-проекта



2020-02-04 127 Обсуждений (0)
Принципы разработки FLASH-проекта 0.00 из 5.00 0 оценок




 

Изучив литературу по технологии FLASH, мы сформулировали следующие принципы создания FLASH-movie:

 

1. Использование обозначений для элементов, которые появляются больше одного раза.  Так как такие элементы, как векторы, растровые изображения и звук обычно используются в одном проекте несколько раз, Flash, благодаря своей внутренней функции Symbol Conversation позволяет создавать единственный экземпляр объекта, который можно повторно использовать вместо того, чтобы каждый раз пересоздавать новый. Такой подход существенно уменьшает размер файла проекта. Однако следует помнить, что при изменении свойств «эталона» изменения произойдут везде, где использовался этот «эталон».

2. Объединение кадров в действиях перемещения (motion tweens), которое позволяет автоматически просчитать некоторые промежуточные моменты перемещения, для ускорения разработки проектов. Анимация движения может применяться только к эталонам.

3. Объединение кадров в действиях трансформации (shape tweens), которое позволяет автоматически просчитать некоторые промежуточные моменты трансформации объектов, для ускорения разработки проектов. Анимация формы может применяться только к формам.

4. Сокращение числа различных типов линий (пунктир, точки и т.п).  Линии, нарисованные инструментом "карандаш", требуют меньше памяти, чем мазки кистью.

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

6. Сокращение числа различных шрифтов и стилей, путём преобразования их в объекты векторной графики.

7. Использование возможности анимации растровых изображений или для статических элементов закраски объектов и фона.

 

8. Применение сценариев (Actions Script), вставка их в отдельные кадры фильма. Так называемая «программная анимация». С помощью нее создаются повторяющиеся части анимации, задается большинство параметров объектов. 

9. Возможность сгруппировывать объекты на различных слоях.

10. Использование встроенных инструментов для изменения цветовых эффектов одного и того же объекта.

11. Использование единой палитры, во избежание расхождений с цветами. Цветовые палитры, а также градиентные заливки можно импортировать (и экспортировать) из других графических приложений (например, Macromedia Fireworks и Adobe Photoshop).

12. Применение компонента управления проектом Library, который позволяет быстро найти любой объект и поменять его свойства.

13.  Возможность вставки в текущий проект ранее созданного проекта, а также возможность экспортировать эталоны и клипы из других проектов.

При создании роликов были использованы все виды анимации.

Порядок работы

Вывод

 

    Тесты показали, что программа успешно работает.

Созданные анимации внедрены в систему Moodle

используется в учебном процессе на геологическом факультете КГУ.

 

http://kek.ksu.ru/EOS/Moodle/Anima/Stream_Effects 202.html

ftp://kek.ksu.ru:10021/EOS/Moodle/Anima/Earth/EartButtons.html

 

 

Лаборатория компьютерных средств обучения (Александрова Ирина Сергеевна)

 

Листинг программы.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Unit2, Mask;

type

TForm1 = class(TForm)

RadioGroup1: TRadioGroup;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var  Form1: TForm1;

x, y, d, g, p, Q: array of Double;

n, count: integer;

implementation

 

{$R *.dfm}

procedure activateItems(flag1: BOOL; flag2: BOOL); // Изменить видимость объектов

begin

Form1.Label1.Visible:=flag1;       Form1.Label2.Visible:=flag1;

Form1.Label3.Visible:=flag1;       Form1.Label4.Visible:=flag1;

Form1.Label5.Visible:=flag2;       Form1.Edit1.Visible:=flag1;

Form1.Edit2.Visible:=flag1;         Form1.Edit3.Visible:=flag1;

Form1.Edit4.Visible:=flag2;         Form1.Button1.Visible:=flag1;

Form1.Button3.Visible:=flag1;

if (flag1=False) AND (flag2=False) then

begin

Form1.Edit1.Clear;         Form1.Edit2.Clear;

Form1.Edit3.Clear;         Form1.Edit4.Clear;

end;

end;

 

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

activateItems(True,True);

n:=4;

end;

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

activateItems(True,False);

n:=3;

end;

 

procedure TForm1.Button2Click(Sender: TObject); // Выход

begin

Form1.Close;         Form2.Close;

end;

 

procedure TForm1.Button3Click(Sender: TObject); // Сброс

begin

activateItems(False,False);

RadioButton1.Checked:=False;

RadioButton2.Checked:=False;

end;

 

function f(x: array of Double): Double;   // Значение функции

var a, b, c: Double;

begin

if (n=4) then

begin

a:=sqr(x[0]+10*x[1])+5*sqr(x[2]-x[3]);

b:=sqr(x[1]-2*x[2]);

c:=sqr(x[0]-x[3]);

Result:=a+sqr(b)+10*sqr(c);

end

else

if (n=3) then

begin

a:=3*sqr(x[0]-4);

b:=5*sqr(x[1]+3);

c:=7*sqr(2*x[2]+1);

Result:=a+b+c;

end;

end;

 

function Gradient(x: array of Double; n: integer): Double; // Значение градиента

var ggg: Double;

begin

ggg:=0;

if (n=4) then

begin

g[0]:=2*(x[0]+10*x[1])+40*sqr(x[0]-x[3])*(x[0]-x[3]);

g[1]:=20*(x[0]+10*x[1])+4*sqr(x[1]-2*x[2])*(x[1]-2*x[2]);

g[2]:=10*(x[2]-x[3])-8*sqr(x[1]-2*x[2])*(x[1]-2*x[2]);

g[3]:=-10*(x[2]-x[3])-40*sqr(x[0]-x[3])*(x[0]-x[3]);

       // Вычисляем норму градиента

ggg:=g[0]*g[0]; ggg:=ggg+sqr(g[1]); ggg:=ggg+sqr(g[2]); ggg:=ggg+sqr(g[3]);

end

else

if (n=3) then

begin

g[0]:=6*(x[0]-4);

g[1]:=10*(x[1]+3);

g[2]:=28*(2*x[2]+1);

ggg:=sqr(g[0]);  ggg:=ggg+sqr(g[1]);  ggg:=ggg+sqr(g[2]);

end;

Result:=sqrt(ggg);

end;

 

procedure Interpolation();        // Кубическая интерполяция

var Gp, Gq, Fp, Fq, Gr, Fr, HH, z, w, r: Double;

var Qx: Double;

var i: Integer;

begin

Fp:=f(x);

while True do // Находим направление

begin

Gp:=0;

for i:=0 to n-1 do

Gp:= Gp + g[i]*d[i];

Qx:=ABS((2*Fp)/Gp);

if Qx>1 then Qx:=1;

if Gp<0 then break;

for i:=0 to n-1 do

begin

x[i]:= p[i]-Qx*d[i];

p[i]:=x[i];

end;

Fp:=f(x);

Gradient(x,n);

end;

HH:=Qx;

while True do //Находим точку q

begin

for i:=0 to n-1 do

begin

Q[i]:=p[i]+ HH*d[i];

x[i]:=Q[i];

end;

Fq:=f(x);

Gradient(x,n);

Gq:=0;

for i:=0 to n-1 do

Gq:=Gq+g[i]*d[i];

if (Gq>0) or (Fq>Fp) then break;

HH:=2*HH;

end;

while True do // аппроксимация точки минимума на (0,HH) значением r

begin

z:=((3*(Fp-Fq))/HH)+Gp+Gq;

w:=z*z-Gp*Gq;

if (w<0) then w:=0;

w:=sqrt(w);

r:=HH*(1-((Gq+w-z)/(Gq-Gp+2*w)));

for i:=0 to n-1 do

x[i]:= p[i]+ r*d[i];

Fr:=f(x);

Gradient(x,n);

Gr:=0;

for i:=0 to n-1 do

Gr:=Gr+g[i]*d[i];

if (Fr<=Fp) and (Fr<=Fq) then break; //условия выхода из интерполяции

if Gr>0 then

begin

HH:=r;

for i:=0 to n-1 do

   Q[i]:=x[i];

Fq:=Fr;

Gq:=Gr;

end

else

begin

HH:=HH-r;

for i:=0 to n-1 do

   p[i]:=x[i];

Fp:=Fr;

Gp:=Gr;

end;

end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);      // Метод ДФП

var kk, wk, dk: Double;

var i, j: integer;

var U, M, V: array of Double;

var H: array of array of Double;

const Eps=0.00001; e=0.00005; // заданная точность

begin

SetLength(x,n);     SetLength(H,n,n);

SetLength(d,n);     SetLength(g,n);

SetLength(U,n);    SetLength(p,n);

SetLength(y,n);     SetLength(M,n);

SetLength(V,n);    SetLength(p,n);

SetLength(Q,n);

x[0]:=StrToFloat(Edit1.Text);

x[1]:=StrToFloat(Edit2.Text);

x[2]:=StrToFloat(Edit3.Text);

if (n=4) then x[3]:=StrToFloat(Edit4.Text);

Form2.Show;

Form2.ListBox1.Clear;

count:=0; // количество итераций

dk:=1;

for i:=0 to n-1 do

begin

for j:=0 to n-1 do

H[i,j]:=0;

H[i,i]:=1;

end;

// Цикл Метода

while (sqrt(dk)>=e) and (Gradient(x,n)>=Eps) do

begin

for i:=0 to n-1 do

begin

p[i]:=x[i]; y[i]:=x[i];

end;

Gradient(x,n);

for i:=0 to n-1 do //запоминаем градиент в U[] и задаем направление спуска d[]

begin

U[i]:=g[i];

d[i]:=0;

for j:=0 to n-1 do

   d[i]:=d[i]-H[i,j]*g[j];

end;

Interpolation();

kk:=0; wk:=0; dk:=0;   // обновим матрицу H

for i:=0 to n-1 do

begin

U[i]:=g[i]-U[i];

V[i]:=x[i]-y[i];

end;

for i:=0 to n-1 do

begin

M[i]:=0;

for j:=0 to n-1 do

   M[i]:=M[i]+H[i,j]*U[j];

kk:=kk+M[i]*U[i];

wk:=wk+V[i]*U[i];

dk:=dk+V[i]*V[i];

end;

if (kk<>0) and (wk<>0) then

begin

for i:=0 to n-1 do

   for j:=0 to n-1 do

   begin

     H[i,j]:=H[i,j]-(M[i]*M[j]/kk)+(V[i]*V[j]/wk);

   end;

end;

count:=count+1;

Form2.ListBox1.Items.Add('              Итерация '+IntToStr(count));

Form2.ListBox1.Items.Add(' f(x) = '+FloatToStrF(f(x),ffGeneral,7,0));

for i:=0 to n-1 do

Form2.ListBox1.Items.Add('x'+IntToStr(i+1)+' = '+ FloatToStrF(x[i],ffGeneral,7,0));

Form2.ListBox1.Items.Add('');

end; // Конец цикла минимизации

Form2.ListBox1.Items.Add('              Минимизация закончена!');

Form2.ListBox1.Items.Add('Количество итераций: '+IntToStr(count));

Form2.ListBox1.Items.Add('Минимум функции f(x) = '+FloatToStrF(f(x),ffGeneral,7,0));

for i:=0 to n-1 do

Form2.ListBox1.Items.Add('x'+IntToStr(i+1)+' = '+ FloatToStrF(x[i],ffGeneral,7,0));

end;

end.

 

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm2 = class(TForm)

Label1: TLabel;

ListBox1: TListBox;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

 

procedure TForm2.Button1Click(Sender: TObject); // Выход

begin

Form1.Close;

Form2.Close;

end;

end.

 

 



2020-02-04 127 Обсуждений (0)
Принципы разработки FLASH-проекта 0.00 из 5.00 0 оценок









Обсуждение в статье: Принципы разработки FLASH-проекта

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (127)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)