Render.ru

Assign Controler - Float Script

morkovni

Активный участник
Рейтинг
11
#1
помогите с написанием скрипта в 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?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Текущее положение вычисляет контроллер, соответственно из контроллера самого себя вызвать нельзя.
Если нужно сохраняй предыдущее значение в глобальной переменной, или делай внешний контроллер.
 

morkovni

Активный участник
Рейтинг
11
#3
когда пытался создать переменную с привязкой к y_position скрипт выдает ошибку рекурсии, т.е. контроллер ссылается на самого себя...
а как создать глобальную переменную?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Базовые понятия неплохо бы знать прежде чем копаться в контроллере, читаем:
Scope of Variables,
Local and Global Variables
 

morkovni

Активный участник
Рейтинг
11
#5
как создать глобальную переменную я понимаю, мне не понятно как обратиться (на языке maxscript) к предыдущему значению позиции объекта...
ps: долго изучал справку перед тем как спросить, но, к сожалению, мой англ. не очень...
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#6
Теперь я тебя не понимаю, в чем проблема прочитать переменную ?
Ps Если это сложно то делай через внешний контроллер, не мучайся, там можно считывать позицию объекта.
 

morkovni

Активный участник
Рейтинг
11
#7
я не понимаю, есть ли в макс скрипт глобальная переменная, которая определяет положение объекта допустим по оси y, если есть, то как ее вызывать? Box01.pos.y, Obj.pos.y - так несколько раз видел в справке, пробовал - не работает.
если нет глобальной переменной, то как обратиться к контроллеру, Y_Position? (по аналогии с wire parametrs) - пробовал - не работает...
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#8
Ты не понял, я уже говорил что в таком варианте нельзя получить текущее значение простым обращение к параметрам объекта поскольку вызовет зацикливание.
Но текущее положение это ничто иное как результат вычисления этого контроллера на предыдущем шаге,
а значит его можно сохранить в во временную переменную и на следующем шаге ее просто использовать если нужно.
PS Кстати сейчас проверил на 2011 конструкция $Box01.pos.y работает
 

morkovni

Активный участник
Рейтинг
11
#9
попробую с $...
пробовал с временной переменной, не получилось... я программировал в Pascal-е, немного в Python-е, но это мне не помогло понять принцип работы цикла в Script Controller-е...
 

morkovni

Активный участник
Рейтинг
11
#11
еще один вопрос:
написал вот такой скрипт:


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

Модератор форума
Команда форума
Рейтинг
138
#12
Проверь что в тайм конфигурации не стоит галка на реал-тайм.
1) Контроллер может считаться между кадрами, нужно учитывать время вызова.
2) Теоритически могут дергать все кому не лень, но вроде не должно влиять.
 

morkovni

Активный участник
Рейтинг
11
#13
спасибо! помогло отключение real time. т.е. получается с включенным real time script controller просчитывает не все кадры?
 
Сверху