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

Проверка и исполнение цикла при анимации.

Тема в разделе "MAXScript", создана пользователем Виталий Мартынов, 28 окт 2012.

Модераторы: Savin Denis
  1. Виталий Мартынов

    Виталий Мартынов Знаток

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    Всем привет. Возникла такая задача. Нужно осуществить исполнение цикла на каждом фрейме анимации. Поясню на примере. Есть бокс разбитай на фрагменты, которые объединены в группу. Группа двигается по оси х. Нужно осуществить скрывание фрагментов при анимации, если их положение больше определенного значения. Составляю скрипт.


    s = $*frag* -- создаю коллекцию из фрагментов
    a = (s as array) -- создаю массив из коллекции
    g = $Group001 -- определяю группу фрагментов
    animate on
    ( at time 0 g.pos = [0, 0, 0]
    at time 100 g.pos = [150, 0, 0] -- двигаю группу
    for i = 1 to a.count do
    (
    if a.pos.x > 50 do hide a -- задаю скрытие фрагментов по положению
    )
    )

    При исполнении происходит скрытие только в начальном кадре, и не происходит в остальных. А нужно чтоб куски скрывались последовательно на протяжении всей анимации, если их положение по х становится больше 50. Голову изломал - так и не получилось. Может знающие подскажут.
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример: Кусок это чайник. Скрываем материал кусков.
    1. В новой сцене запускаем скрипт.
    2. Визуализируем сцену.
    Код:
    for i=1 to 5 do
    (
    t=Teapot();t.name="igorznag_frag"+(i as string);
    m=standardMaterial();m.name="igorznag_frag_mat"+(i as string);
    m.diffuse=color (random 0 255) (random 0 255) (random 0 255)
    t.radius=10;t.pos.x=i*25;t.material=m
    )
    group $igorznag_frag* name:"igorznag_Group001"
    ---------------------------------------------
    s=$igorznag_frag*
    a = (s as array)
    g = $igorznag_Group001
    animate on 
    (
    at time 0 g.pos = [0, 0, 0] 
    at time 100 g.pos = [150, 0, 0]
    for i = 1 to a.count do 
    ( 
    for j=0 to 100 do
    (
    at time j 
    if a[i].pos.x > 50 then a[i].material.opacity=0
    else a[i].material.opacity=100
    )--for j=0 to 100 do
    )--for i = 1 to a.count do
    )--animate on 
     
  3. Виталий Мартынов

    Виталий Мартынов Знаток

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    Спасибо за ответ. Понял свою ошибку. Нужно было создавать дополнительный цикл для animate для создания ключей
    и анимировать visibility (это если не юзать материал).
     
Модераторы: Savin Denis

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