1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Вопрос по random()

Тема в разделе "Adobe After Effects", создана пользователем ИСИТ, 17 окт 2011.

Модераторы: ksi2, Saplus
  1. ИСИТ

    ИСИТ Пользователь сайта

    С нами с:
    26.09.2011
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    2
    Добрый вечер!
    Стоит такая задача: в момент времени А слой имеет координаты (random(), random() , -1000), в момент времени Б - (random(), random() , 1000)
    Проблема в том, что слоев таких много и у каждого координаты начала и конца должны различаться. Если просто копировать написанное мной выражение, выходит, что все слои имеют одинаковые координаты начала и конца. Как мне это исправить?

    Код:
    t =(thisComp.layer("Null 3").effect("Slider Control")("Slider"));
    this_layer.position =[random() + (t)*50, random() + (t)*50, -1000 + t*400] 
    Null 3 меняет значение от 0 до 5 за необходимое мне время.
     
  2. Aspel

    Aspel Активный участник

    С нами с:
    17.05.2011
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    15
    Я правильно понимаю, проблема только в том, чтоб в НАЧАЛЬНЫЙ момент каждый слой имел РАЗЛИЧНЫЕ, но СЛУЧАЙНЫМ ОБРАЗОМ сгенерированные координаты?
    Я только что набросал такую схему - решаем вашу задачу в два этапа:

    1 - с помощью скрипта "разбрасываем" все слои в пространстве (скрипт тут удобен тем, что одним нажатием разбросает и 300 и 400 слоев)
    пример основного тела скрипта:

    for (i=2;i<=8;i=i+1)
    {
    x=Math.random();
    y=Math.random();
    activeItem.layer(i).property("position").setValue([ x,y, -1000]);

    }

    В этом цикле мы перебираем все слои с 2-го по 8-й (у меня 8, вместо 8-ми ставь свое количество)
    Первым слоем в самом верху ставишь свой "Нуль 3". При активной композиции в прожект менеджере запускаешь скрипт, и вуаля - слои разбросаны как надо.

    2 - Потом на каждый слой вешаешь свой экспрешн, но с небольшими изменениями, а именно:

    t =(thisComp.layer("Null 3").effect("Slider Control")("Slider"));

    this_layer.position =[this_layer.position[0] + (t)*50, this_layer.position[1]+ (t)*50, -1000 + t*400];

    ЗЫ: Я не спец в скриптах и экспрешенах, но ятолько что потестил - у меня такой алгоритм сработал.
     
Модераторы: ksi2, Saplus

Поделиться этой страницей