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

Анимация столбиков как в эквалайзере, только правильной волной

Тема в разделе "Анимация", создана пользователем Tongue, 17 авг 2012.

Модераторы: Артер
  1. Tongue

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

    С нами с:
    01.01.2008
    Сообщения:
    71
    Симпатии:
    13
    Баллы:
    7
    Всем привет!
    Есть ряд боксов (столбики,частокол или подобного вида)
    нужно пустить по ним волну. То есть чтобы каждый по очереди плавно изменял свою высоту. В итоге получится одна волна, которая пройдет по всему ряду боксов.
    Было бы неплохо контролировать этот процесс, например, перемещением думмика.

    Кто может посоветовать, как решить этот момент?
    Спасибо заранее!
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Пример:
    1. В новой сцене запускаем скрипт.
    2. В новом окне нажимаем кнопку "Example".
    3. Выделяем боксы и нажимаем кнопку "Apply".
    4. Перемещаем думмик или визуализируем сцену.
    Код:
    try(destroyDialog igorznag_ro_wave) catch() 
    rollout igorznag_ro_wave "Wave" 
    (
    button btn_example "Example" pos:[10,10]
    button btn_apply "Apply" pos:[80,10]
    on btn_example pressed do
    (
    for i=1 to 10 do
    (
    obj=box length:10 width:10 height:10
    obj.pos.x=(i-1)*10
    )
    sp= splineShape(); sp.name="wave";
    addNewSpline sp;
    addKnot sp 1 #smooth #curve [0,0,0]
    addKnot sp 1 #smooth #curve [-50,0,40]
    addKnot sp 1 #smooth #curve [-100,0,20]
    addKnot sp 1 #smooth #curve [-140,0,35]
    addKnot sp 1 #smooth #curve [-160,0,23]
    addKnot sp 1 #smooth #curve [-200,0,20]
    addKnot sp 1 #smooth #curve [-305,0,20]
    updateShape sp; sp.renderable=false
    sp.render_displayRenderMesh=true
    sp.render_useViewportSettings=true
    sp.render_displayRenderSettings=false
    sp.render_viewport_rectangular =false
    sp.render_viewport_thickness =1
    sp.render_viewport_sides=3
    addModifier sp (Edit_Mesh())
    
    d=dummy();d.boxsize=[10,10,10];d.pos=[0,0,0]
    d.name="dummy_wave"; sp.parent=d;
    with animate on at time 100 d.pos=[300,0,0]
    completeRedraw();
    )--on btn_example pressed do
    
    on btn_apply pressed do
    (
    try
    (
    for obj in selection do
    (
    obj.height.controller=float_script()
    str="";
    str=str+"h=0";str=str+"\n"
    str=str+"try";str=str+"\n"
    str=str+"(";str=str+"\n"
    str=str+"dependsOn $wave";str=str+"\n"
    str=str+"refsArray = (refs.dependents this)";str=str+"\n"
    str=str+"for i in refsArray where isvalidnode i do";str=str+"\n"
    str=str+"(";str=str+"\n"
    str=str+"r= ray i.pos i.dir";str=str+"\n"
    str=str+"p=intersectRay $wave r";str=str+"\n"
    str=str+"if(p!=undefined)then";str=str+"\n"
    str=str+"(";str=str+"\n"
    str=str+"h=length(p.pos-i.pos)";str=str+"\n"
    str=str+")--if(p!=undefined)then";str=str+"\n"
    str=str+")--for i in refsArray where isvalidnode i do";str=str+"\n"
    str=str+")";str=str+"\n"
    str=str+"catch ()";str=str+"\n"
    str=str+"h";
    obj.height.controller.script=str;
    )--for obj in selection do
    )
    catch ()
    )--on btn_apply pressed do
    )--rollout igorznag_ro_wave "Wave" 
    createDialog igorznag_ro_wave 130 40
    Чтобы запустить скрипт нужно:
    1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
    2. Сохраняем текстовый файл с названием "test.ms"
    3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
     
Модераторы: Артер

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