Render.ru

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

zambi

Активный участник
Рейтинг
8
#1
ситуация такая есть вот такой кусок кода (интересует только конструкция 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 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
)


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

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


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

zambi

Активный участник
Рейтинг
8
#2
код скрипта
вопросы
1) конструкция when ghanges do работает в цикле? (приведите пример кода)
2) есть возможность решить проблему видимости с i в цикле без объявления глобальной (2,3 часть)
 

Вложения

zambi

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

Вложения

Сверху