Render.ru

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

Александр Якушев

Активный участник
Рейтинг
7
#1
Опять застрял. Выручите плз. В общем есть функция, которая останавливает бегунок анимации:

Код:
	---------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), то прекрасно останавливает. Помогите разобраться, в чем же разница???
 

igorznag

Мастер
Рейтинг
103
#2
Вариант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
... и запускать слайдер(play) ... Помогите разобраться, в чем же разница?
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.
 

Александр Якушев

Активный участник
Рейтинг
7
#3
Спасибо, что в хелп направляешь!)) Все заработало! Но только немножко не так, как хотелось бы.

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


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

igorznag

Мастер
Рейтинг
103
#4
Вариант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
 
Сверху