Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Програмная анимация. How to... (http://www.flasher.ru/forum/showthread.php?t=46991)

Boyler 19.07.2003 08:58

Програмная анимация. How to...
 
Вложений: 1
Как сделать так чтобы 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

:)
 
Вложений: 1
Код:

// скорость появления линий....
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

Вложений: 1
никаких кадров я не добавлял конечно:)

смысл такой:
после создания всех линий я делаю их невыдимыми...
свойство _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

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


Часовой пояс GMT +4, время: 12:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.