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

Как остановить бегунок анимации при включе

Тема в разделе "MAXScript", создана пользователем Александр Якушев, 14 дек 2012.

Модераторы: Savin Denis
  1. Александр Якушев

    Александр Якушев Активный участник

    С нами с:
    13.08.2009
    Сообщения:
    77
    Симпатии:
    1
    Баллы:
    7
    Опять застрял. Выручите плз. В общем есть функция, которая останавливает бегунок анимации:

    Код:
    	---------fn
    		fn CurentFrames tempFrame =
    	(
    			global tempFrame2=tempFrame
    			rollout CFrames "Frames"
    			(
    			timer tclock "Timer" interval:20
    			label var01 ""
    
    					on tclock tick do
    					(
    					var01.text = slidertime as string
    							if slidertime >= tempFrame2 do
    							(
    							print slidertime
    							stopAnimation()
    							destroydialog CFrames
    							)
    					)
    			)
    	createdialog CFrames
    	)
    	-----------fn
    Она прекрасно останавливает бегунок при выключенной кнопке AutoKey.
    При включении же записи анимации перестает работать, хоть тресни не могу понять почему.
    Вот пример кода:
    Код:
    (-----start
    	---------fn
    		fn CurentFrames tempFrame =
    	(
    			global tempFrame2=tempFrame
    			rollout CFrames "Frames"
    			(
    			timer tclock "Timer" interval:20
    			label var01 ""
    
    					on tclock tick do
    					(
    					var01.text = slidertime as string
    							if slidertime >= tempFrame2 do
    							(
    							print slidertime
    							stopAnimation()
    							destroydialog CFrames
    							)
    					)
    			)
    	createdialog CFrames
    	)
    	-----------fn
    						max time start
    						max tool animmode
    						max time play
    						CurentFrames 95
    						max tool animmode
    )---end
    Обновление сообщения автором
    14.12.2012 в 20:40
    Да вот еще хотелось бы добавить. Если запускать функцию в ручном режиме, к примеру, с листенера и только потом включать запись и запускать слайдер(play), то прекрасно останавливает. Помогите разобраться, в чем же разница???
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Вариант1:
    Код:
    max time start 
    max tool animmode 
    CurentFrames 95 
    max time play 
    max tool animmode
    Вариант2:
    Код:
    max time start 
    max tool animmode 
    playAnimation immediateReturn:true
    CurentFrames 95 
    max tool animmode 
    Time Control
    Calling playAnimation() is a thread-blocking call internally in 3ds Max and does not return until the playback is stopped by the user clicking the Stop Play button or another thread executing a stopAnimation()
    If immediateReturn is set to true, or Real Time Playback is off (realTimePlayback = false), the method returns immediately.
     
  3. Александр Якушев

    Александр Якушев Активный участник

    С нами с:
    13.08.2009
    Сообщения:
    77
    Симпатии:
    1
    Баллы:
    7
    Спасибо, что в хелп направляешь!)) Все заработало! Но только немножко не так, как хотелось бы.

    Суть как раз в том, что надо проигрывать анимацию именно при включенной записи. Сейчас же все нормально останавливается, а AutoKey включается только на какое-то мгновение.
    В общем надо добиться такой работы от скрипта, как если бы человек сам нажимал AutoKey -> Play -> Stop(для отключения на нужном кадре) -> AutoKey.
    Помоги плз разобраться.


    П.С. Да, если можно, как-нить пану модератору название темы поправить на "Тема: Как остановить slider при включенном AutoKey?"
     
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Вариант1:
    Код:
    (-----start 
    ---------fn 
    fn CurentFrames tempFrame = 
    ( 
    global tempFrame2=tempFrame 
    rollout CFrames "Frames" 
    ( 
    timer tclock "Timer" interval:20 
    label var01 "" 
    
    on tclock tick do 
    ( 
    var01.text = slidertime as string 
    if slidertime >= tempFrame2 do 
    ( 
    print slidertime 
    stopAnimation() 
    destroydialog CFrames 
    ) 
    ) 
    ) 
    createdialog CFrames 
    ) 
    -----------fn 
    max time start 
    max tool animmode 
    CurentFrames 95 
    max time play 
    max tool animmode
    )---end
    Вариант2:
    Код:
    (-----start 
    ---------fn 
    fn CurentFrames tempFrame = 
    ( 
    global tempFrame2=tempFrame 
    rollout CFrames "Frames" 
    ( 
    timer tclock "Timer" interval:20 
    label var01 "" 
    
    on tclock tick do 
    ( 
    var01.text = slidertime as string 
    if slidertime >= tempFrame2 do 
    ( 
    print slidertime 
    stopAnimation()
    max tool animmode
    destroydialog CFrames 
    ) 
    ) 
    ) 
    createdialog CFrames 
    ) 
    -----------fn 
    max time start 
    max tool animmode 
    playAnimation immediateReturn:true 
    CurentFrames 95 
    )---end
     
  5. Александр Якушев

    Александр Якушев Активный участник

    С нами с:
    13.08.2009
    Сообщения:
    77
    Симпатии:
    1
    Баллы:
    7
    Вах, вах, вах! Спасибо igorznag!
     
Модераторы: Savin Denis

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