1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Assign Controler - Float Script

Тема в разделе "MAXScript", создана пользователем morkovni, 1 ноя 2010.

Модераторы: Savin Denis
  1. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    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?
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Текущее положение вычисляет контроллер, соответственно из контроллера самого себя вызвать нельзя.
    Если нужно сохраняй предыдущее значение в глобальной переменной, или делай внешний контроллер.
     
  3. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    когда пытался создать переменную с привязкой к y_position скрипт выдает ошибку рекурсии, т.е. контроллер ссылается на самого себя...
    а как создать глобальную переменную?
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Базовые понятия неплохо бы знать прежде чем копаться в контроллере, читаем:
    Scope of Variables,
    Local and Global Variables
     
  5. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    как создать глобальную переменную я понимаю, мне не понятно как обратиться (на языке maxscript) к предыдущему значению позиции объекта...
    ps: долго изучал справку перед тем как спросить, но, к сожалению, мой англ. не очень...
     
  6. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Теперь я тебя не понимаю, в чем проблема прочитать переменную ?
    Ps Если это сложно то делай через внешний контроллер, не мучайся, там можно считывать позицию объекта.
     
  7. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    я не понимаю, есть ли в макс скрипт глобальная переменная, которая определяет положение объекта допустим по оси y, если есть, то как ее вызывать? Box01.pos.y, Obj.pos.y - так несколько раз видел в справке, пробовал - не работает.
    если нет глобальной переменной, то как обратиться к контроллеру, Y_Position? (по аналогии с wire parametrs) - пробовал - не работает...
     
  8. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Ты не понял, я уже говорил что в таком варианте нельзя получить текущее значение простым обращение к параметрам объекта поскольку вызовет зацикливание.
    Но текущее положение это ничто иное как результат вычисления этого контроллера на предыдущем шаге,
    а значит его можно сохранить в во временную переменную и на следующем шаге ее просто использовать если нужно.
    PS Кстати сейчас проверил на 2011 конструкция $Box01.pos.y работает
     
  9. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    попробую с $...
    пробовал с временной переменной, не получилось... я программировал в Pascal-е, немного в Python-е, но это мне не помогло понять принцип работы цикла в Script Controller-е...
     
  10. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    все, спасибо, разобрался... $Box01.pos.y - то что нужно!
     
  11. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    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 постоянным, для меня это критично...?
     
  12. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Проверь что в тайм конфигурации не стоит галка на реал-тайм.
    1) Контроллер может считаться между кадрами, нужно учитывать время вызова.
    2) Теоритически могут дергать все кому не лень, но вроде не должно влиять.
     
  13. morkovni

    morkovni Активный участник

    С нами с:
    25.10.2008
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    11
    спасибо! помогло отключение real time. т.е. получается с включенным real time script controller просчитывает не все кадры?
     
  14. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Да, пропускает если не успевает от рисовать кадр.
     
Модераторы: Savin Denis

Поделиться этой страницей