помогите с написанием скрипта в Script Controller (т.е. объект уже создан, Motion - Assign Controler - Y Position - Assign Controler - Float Script).
Объект должен перемещаться по оси Y в определенные моменты времени: когда переменная A<10, иначе должен стоять на месте. должно получиться примерно следующее:
if A<10 then Y_Position+k*F else Y_position
причем Y_position - текущее положение объекта по оси Y, F - текущий кадр.
подскажите как на языке max_script обозначается текущее положение данного объекта, т.е. Y_Position?
Текущее положение вычисляет контроллер, соответственно из контроллера самого себя вызвать нельзя.
Если нужно сохраняй предыдущее значение в глобальной переменной, или делай внешний контроллер.
когда пытался создать переменную с привязкой к y_position скрипт выдает ошибку рекурсии, т.е. контроллер ссылается на самого себя...
а как создать глобальную переменную?
как создать глобальную переменную я понимаю, мне не понятно как обратиться (на языке maxscript) к предыдущему значению позиции объекта...
ps: долго изучал справку перед тем как спросить, но, к сожалению, мой англ. не очень...
Теперь я тебя не понимаю, в чем проблема прочитать переменную ?
Ps Если это сложно то делай через внешний контроллер, не мучайся, там можно считывать позицию объекта.
я не понимаю, есть ли в макс скрипт глобальная переменная, которая определяет положение объекта допустим по оси y, если есть, то как ее вызывать? Box01.pos.y, Obj.pos.y - так несколько раз видел в справке, пробовал - не работает.
если нет глобальной переменной, то как обратиться к контроллеру, Y_Position? (по аналогии с wire parametrs) - пробовал - не работает...
Ты не понял, я уже говорил что в таком варианте нельзя получить текущее значение простым обращение к параметрам объекта поскольку вызовет зацикливание.
Но текущее положение это ничто иное как результат вычисления этого контроллера на предыдущем шаге,
а значит его можно сохранить в во временную переменную и на следующем шаге ее просто использовать если нужно.
PS Кстати сейчас проверил на 2011 конструкция $Box01.pos.y работает
попробую с $...
пробовал с временной переменной, не получилось... я программировал в Pascal-е, немного в Python-е, но это мне не помогло понять принцип работы цикла в Script Controller-е...
k=1.8351
b=12
if F==0 then -2960 else (
if (y_kal<50 or y_kal>910) then (
if y_kal<50 then
( $Tube01.pos.y+(k/(b+abs(0-y_kal))) ) else
( $Tube01.pos.y+(k/(b+abs(960-y_kal))) ) ) else $Tube01.pos.y )
в результате перемещение по оси Y с каждым запуском анимации различное. (я запускаю анимацию с 0-го кадра, и (например) к 50 кадру считаю перемещение Tube01, например 10 мм, заново запускаю анимацию с 0-го кадра до 50, измеряю перемещение - оно уже 10,2)
переменная y_kal меняется от 0 до 960 и обратно до 0 с циклом 240 кадров, причем она изменяется дискретно и принимает только определенные значения, т.е. непостоянство результирующего перемещения не должно быть связано с этой переменной.
подскажите пожалуйста как сделать перемещение Tube01 постоянным, для меня это критично...?
Проверь что в тайм конфигурации не стоит галка на реал-тайм.
1) Контроллер может считаться между кадрами, нужно учитывать время вызова.
2) Теоритически могут дергать все кому не лень, но вроде не должно влиять.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
morkovni
Объект должен перемещаться по оси Y в определенные моменты времени: когда переменная A<10, иначе должен стоять на месте. должно получиться примерно следующее:
if A<10 then Y_Position+k*F else Y_position
причем Y_position - текущее положение объекта по оси Y, F - текущий кадр.
подскажите как на языке max_script обозначается текущее положение данного объекта, т.е. Y_Position?
Savin Denis
Если нужно сохраняй предыдущее значение в глобальной переменной, или делай внешний контроллер.
morkovni
а как создать глобальную переменную?
Savin Denis
Scope of Variables,
Local and Global Variables
morkovni
ps: долго изучал справку перед тем как спросить, но, к сожалению, мой англ. не очень...
Savin Denis
Ps Если это сложно то делай через внешний контроллер, не мучайся, там можно считывать позицию объекта.
morkovni
если нет глобальной переменной, то как обратиться к контроллеру, Y_Position? (по аналогии с wire parametrs) - пробовал - не работает...
Savin Denis
Но текущее положение это ничто иное как результат вычисления этого контроллера на предыдущем шаге,
а значит его можно сохранить в во временную переменную и на следующем шаге ее просто использовать если нужно.
PS Кстати сейчас проверил на 2011 конструкция $Box01.pos.y работает
morkovni
пробовал с временной переменной, не получилось... я программировал в Pascal-е, немного в Python-е, но это мне не помогло понять принцип работы цикла в Script Controller-е...
morkovni
morkovni
написал вот такой скрипт:
k=1.8351
b=12
if F==0 then -2960 else (
if (y_kal<50 or y_kal>910) then (
if y_kal<50 then
( $Tube01.pos.y+(k/(b+abs(0-y_kal))) ) else
( $Tube01.pos.y+(k/(b+abs(960-y_kal))) ) ) else $Tube01.pos.y )
в результате перемещение по оси Y с каждым запуском анимации различное. (я запускаю анимацию с 0-го кадра, и (например) к 50 кадру считаю перемещение Tube01, например 10 мм, заново запускаю анимацию с 0-го кадра до 50, измеряю перемещение - оно уже 10,2)
переменная y_kal меняется от 0 до 960 и обратно до 0 с циклом 240 кадров, причем она изменяется дискретно и принимает только определенные значения, т.е. непостоянство результирующего перемещения не должно быть связано с этой переменной.
подскажите пожалуйста как сделать перемещение Tube01 постоянным, для меня это критично...?
Savin Denis
1) Контроллер может считаться между кадрами, нужно учитывать время вызова.
2) Теоритически могут дергать все кому не лень, но вроде не должно влиять.
morkovni
Savin Denis