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

конструкция when changes do

Тема в разделе "MAXScript", создана пользователем zambi, 27 июн 2016.

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

    zambi Пользователь сайта

    С нами с:
    18.03.2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    2
    ситуация такая есть вот такой кусок кода (интересует только конструкция when changes do)

    global gi
    Ar_Hpoint = #() --содержит HelpPoint
    Ar_Line=#()--содержит линии
    Ar_All=#(Ar_Hpoint, Ar_Line)--главный массив с объектами содержит все

    --добавляют HelpPoint в сцену и массив
    Fn ADDpoint ArrayA =
    (
    local n = ArrayA.count+1
    ArrayA [n]= point()
    ArrayA [n].box=true
    ArrayA [n].cross=false
    ArrayA [n].size=20
    ArrayA [n].constantscreensize=false
    ArrayA [n]
    )
    --добавляет линию по двум точкам в массив
    Fn drawLineBetweenTwoPoints pointA pointB ArrayC=
    (
    local n = ArrayC.count+1
    ArrayC[n]=SplineShape pos:pointA
    --local ss = SplineShape pos:pointA
    addNewSpline ArrayC[n]
    addKnot ArrayC[n] 1 #corner #line PointA
    addKnot ArrayC[n] 1 #corner #line PointB
    updateShape ArrayC[n]
    ArrayC [n]
    )
    (
    ADDpoint Ar_Hpoint
    ADDpoint Ar_Hpoint
    move Ar_Hpoint [2] [50,0,0]
    ADDpoint Ar_Hpoint
    move Ar_Hpoint [3] [100,0,0]
    drawLineBetweenTwoPoints Ar_Hpoint[1].pos Ar_Hpoint[2].pos Ar_Line
    drawLineBetweenTwoPoints Ar_Hpoint[2].pos Ar_Hpoint[3].pos Ar_Line
    )
    when transform Ar_Hpoint[1] changes do (setKnotPoint Ar_Line[1] 1 1 Ar_Hpoint[1].pos ; updateShape Ar_Line[1])
    when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[1] 1 2 Ar_Hpoint[2].pos ; updateShape Ar_Line[1])
    when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[2] 1 1 Ar_Hpoint[2].pos ; updateShape Ar_Line[2])
    when transform Ar_Hpoint[3] changes do (setKnotPoint Ar_Line[2] 1 2 Ar_Hpoint[3].pos ; updateShape Ar_Line[2])

    работает все замечательно но как только данную конструкцию включаю в состав цикла начинаются проблемы

    заменяю все when на следующий код
    for b=1 to 2 do (
    when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
    when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
    )

    затем на


    for n=1 to 2 do (
    global b=n
    when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
    when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line[b] 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line[b])
    )


    при первом варианте замены он почему то перестает видеть переменную b
    ладно бог с тобой делаю b глобальной видит, но дальше он выполняет в цикле только последний цикл хотя в самoм первом варианте все прекрасно работало?

    эта конструкция вобще работает в цикле (приведите пример кода) и как другим способом решить проблему с b без объявления ее глобальной[/B][/B]

    не получается записать пример кода отражает не верно выложу позже прикрепленным фаилом
     
    Последнее редактирование: 27 июн 2016
  2. zambi

    zambi Пользователь сайта

    С нами с:
    18.03.2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    2
    код скрипта
    вопросы
    1) конструкция when ghanges do работает в цикле? (приведите пример кода)
    2) есть возможность решить проблему видимости с i в цикле без объявления глобальной (2,3 часть)
     

    Вложения:

    • код.txt
      Размер файла:
      1,8 КБ
      Просмотров:
      23
  3. zambi

    zambi Пользователь сайта

    С нами с:
    18.03.2009
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    2
    Спасибо pixamoon за ответ. Пишу для тех кому возможно это понадобится.
    Конструкция when changes do отвечает за отслеживание событий в сцене привязанных к объекту и вызывает соответствующую функцию либо набор действий при выявлении этого события. Когда не удалось вставить в цикл это стало неприятным сюрпризом. Решение в прикрепленном фаиле. Выглядит это не обычно но это работает.
     

    Вложения:

    • код.txt
      Размер файла:
      1,2 КБ
      Просмотров:
      23
Модераторы: Savin Denis

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