3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> MaxScript Простейшея задача
iCube
сообщение 12/01/2010, 16:42
Сообщение #1


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 12
Регистрация: 20/05/2007
Пользователь №: 52 335



Необходимо: задать перемещение(поворот) объекту(не принципиально объект будет вращаться вокруг другого объекта или вокруг своей точки опоры), далее необходимо запустить анимацию(это получается), но! В чем суть всей темы? Как остановить анимацию на сотом кадре? Пробовал десятки вариантов ничего не получается... Скорее всего неправильно ввожу команду stopanimation.

macroScript PlayStop
category:"mOS"
( select $LDV
s=cylinder pos:[-40.135,-2.46636,9.80702]
animate on(
at time 100 (about s rotate $ (quat -70 z_axis))
)
playanimation()
if slidertime==100f do stopAnimation()
)


(slidertime - пишется красным(на всякий случай, а может так и должно быть))

Сообщение отредактировал iCube - 12/01/2010, 16:53
Go to the top of the page
 
+Quote Post
secco
сообщение 12/01/2010, 17:24
Сообщение #2


самоучитель
Иконка группы

Группа: Участник
Сообщений: 2 858
Регистрация: 12/02/2004
Пользователь №: 4 541



в хелпе чето написано,
There is an important restriction to understand when using these functions:

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(). The only way to achieve the latter in MAXScript currently is to call stopAnimation() from a scripted rollout panel handler such as a button press handler or from a scripted controller script. If you invoke playAnimation() in code run from the Listener, you will not be able to invoke stopAnimation() from the Listener, because the Listener is blocked inside the playAnimation() call.


не знаю, много букв, чтото угрожающее вроде)

попробовал вариант с таймером, скорее всего он перректален, но работает
останавливается после сотого кадра

(
rollout ug "" width:100 height:50
(
timer tmr "Timer" pos:[13,16] width:24 height:24 interval:20
on tmr tick do
(
if slidertime >100f do
(
stopAnimation()
destroydialog ug
)
)
)
createdialog ug
playanimation()
)


Go to the top of the page
 
+Quote Post
Чубе
сообщение 12/01/2010, 18:06
Сообщение #3


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 231
Регистрация: 11/11/2005
Пользователь №: 17 731



iCube,

в вашем примере проверка (if slidertime==100f ) выполнится один раз, в момент запуска скрипта. Сделать так, чтобы проверка выполнялась всё время, пока играется анимация, можно двумя (очевидными) способами: 1)как предложил secco, по событию таймера. 2)используя коллбэк-функцию.
Go to the top of the page
 
+Quote Post
iCube
сообщение 13/01/2010, 13:56
Сообщение #4


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 12
Регистрация: 20/05/2007
Пользователь №: 52 335



Огромнейшее спасибо за ответы!!!! Все получилось biggrin.gif
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 23/04/2024 - 23:21