PDA

Просмотр полной версии : Програмная анимация. How to...


Boyler
19.07.2003, 08:58
Как сделать так чтобы diplicateMoveClip дублировал линию (в моем случае) в каждом последующем кадре?

Вобщем задача такая - хочется чтобы при запуске клипа задний фон, в моем случае состоящий из линий, прорисовывался как анимация.

Делаю так:

//создаю пустой клип с линией
_root.createEmptyMovieClip("line", 1);
with (_root.line) {
lineStyle(0, 0x00FF00, 100);
lineTo(0, 400);
}
//затем дублирую его слева на право
while (t<183) {
duplicateMovieClip(_root.line, "line"+t, u);
setProperty("line"+t, _x, t*3);
if (t<90) {
setProperty("line"+t, _alpha, (m));
m++
}
else {
setProperty("line"+t, _alpha, (m));
m--
}
t++;
u++;
}

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

Useless
19.07.2003, 10:01
duplicateMovieClip дублирует мувик в первозданном его виде.

В твоём случае - пустой мув.

А что тебе мешает сразу нарисовать все линии в одном клипе?

Пушистик
19.07.2003, 10:02
// скорость появления линий....
speed = 20;
_root.createEmptyMovieClip("line", 1);
with (_root.line) {
lineStyle(0, 0x00FF00, 100);
lineTo(0, 400);
}
_root.createEmptyMovieClip("ram", 777);
with (_root.ram) {
lineStyle(0, 0x00FF00, 100);
moveTo(0,0);
lineTo(550, 0);
lineTo(550, 400);
lineTo(0, 400);
lineTo(0,0);
}
while (t<183) {
duplicateMovieClip(_root.line, "line"+t, u);
_root["line"+t]._x = t*3;
_root["line"+t]._visible = 0;
if (t<90) {
_root["line"+t]._alpha = m;
m++;
} else {
_root["line"+t]._alpha = m;
m--;
}
t++;
u++;
}
_root.createEmptyMovieClip("line2", 2);
with (_root.line2) {
lineStyle(0, 0x00FF00, 100);
lineTo(550, 0);
}
e = 184;
while (z<134) {
duplicateMovieClip(line2, "linera"+z, e);
_root["linera"+z]._y = z*3;
_root["linera"+z]._visible = 0;
if (z<68) {
_root["linera"+z]._alpha = n;
n++;
} else {
_root["linera"+z]._alpha = n;
n--;
}
e++;
z++;
}
_root.createEmptyMovieClip("linert", 600);
with (_root.linert) {
lineStyle(0, 0x00FF00, 100);
moveTo(6, 0);
lineTo(6, 400);
_root.linert._alpha = 0;
}
function addLineX() {
t--;
_root["line"+t]._visible = 1;
if (t==0) {
clearInterval(setx);
}
}
function addLineY() {
z--;
_root["linera"+z]._visible = 1;
if (z==0) {
clearInterval(sety);
}
}
setx = setInterval(function () { addLineX();}, speed);
sety = setInterval(function () { addLineY();}, speed);


брасай setProperty!
пиши вот так!!!!
в твоем случае вместо while я бы использовал for!
всё....:)

Boyler
19.07.2003, 10:22
Вау... полный рулез! То что надо, прямо в точку!

То что выше я еще может переварю, а вот на счет:

function addLineX() {
t--;
_root["line"+t]._visible = 1;
if (t==0) {
clearInterval(setx);
}
}
function addLineY() {
z--;
_root["linera"+z]._visible = 1;
if (z==0) {
clearInterval(sety);
}
}
setx = setInterval(function () { addLineX();}, speed);
sety = setInterval(function () { addLineY();}, speed);

можно по подробнее, for dumies так сказать :rolleyes:
И еще я действительно не понял в каком месте добавляются кадры в таймлайн, хотя начинаю думать что к основному таймлайну это не имеет отношения...

Отказ приму как должное, в любом случае спасибо!

Пушистик
19.07.2003, 11:28
никаких кадров я не добавлял конечно:)

смысл такой:
после создания всех линий я делаю их невыдимыми...
свойство _visible означает видимость 0-нет, 1-да!
вот где я их делаю...

while (t<183) {
duplicateMovieClip(_root.line, "line"+t, u);
_root["line"+t]._x = t*3;
_root["line"+t]._visible = 0;
if (t<90) {....
и для вертикальных линий также....

потом создаю две функции для лини горизонтальных:

function addLineX() {
t--;
_root["line"+t]._visible = 1;
if (t==0) {
clearInterval(setx);
}
и для вертикальных:

function addLineY() {
z--;
_root["linera"+z]._visible = 1;
if (z==0) {
clearInterval(sety);
}
}

смысл этих функций:
после цикла перменные t=180 z=134...
так вот отнимая еденицу от этих чисел...я делаю клипы видимыми поочереди...!

почему же все таки они появляются не сразу???:)
а вот почему:

циклическая фукция setInterval(function () { addLineX();}, speed); выполняется через каждые в данном случае 20 милисекунд таким образом проявляя один клип за другим!
воть:)
если надо еще подробнее ты скажи!

скачай исходник! с framerate=50 он сморится намного круче:)

Boyler
19.07.2003, 11:52
Большое тебе, чисто человеческое, чисто спасибо!
Побольше бы таких добрых людей и может жить стало бы легче... ;)