Render.ru
Поддержать

Assign Controler - Float Script

morkovni

Активный участник
Рейтинг
11
помогите с написанием скрипта в 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
Текущее положение вычисляет контроллер, соответственно из контроллера самого себя вызвать нельзя.
Если нужно сохраняй предыдущее значение в глобальной переменной, или делай внешний контроллер.

morkovni

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

Savin Denis

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

morkovni

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

Savin Denis

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

morkovni

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

Savin Denis

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

morkovni

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

morkovni

Активный участник
Рейтинг
11
все, спасибо, разобрался... $Box01.pos.y - то что нужно!

morkovni

Активный участник
Рейтинг
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
Проверь что в тайм конфигурации не стоит галка на реал-тайм.
1) Контроллер может считаться между кадрами, нужно учитывать время вызова.
2) Теоритически могут дергать все кому не лень, но вроде не должно влиять.

morkovni

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Да, пропускает если не успевает от рисовать кадр.