Render.ru

unknown property: undefited

Дмитрий мелочь

Пользователь сайта
Рейтинг
4
#1
в написанном скрипте при нажатии на кнопку создаётся боксы
b = box ()
b.name = "Down"
b.pos = [0,0,100]
b.height = 300
b.width = 200
b.length = 600

a = box ()
a.name = "app"
a.pos = [0,0,500]
a.height = 200
a.width = 300
a.length = 80

также есть спиннер для управления их положением по высоте

on spn1 changed val do
(
b.pos.z = val;
a.pos.z = spn1.value + spn2.value;

)
при выполнении скрипта и попытке изменить положение боксов со ссылкой на строчку a.pos.z = spn1.value + spn2.value; он пишет что unknown property: "pos" in undefited я пытался по разному менять значения и добавлял другие объекты подобная надпись появляется регулярно, хотя изначально всё работало. С чем это может быть связано?
 

Boro Bum

Пользователь сайта
Рейтинг
4
#2
С тем, что он понятия не имеет что такое а
Я так же не оч представляю по этим кускам, что вы мудрите. Исходя из них,возможно как то так?
Код:
(
    rollout tst "" width:120
    (
        local b,a
        spinner spn1 "S1: " range:[-1e4,1e4,0] type:#worldunits fieldwidth:70 align:#center
        spinner spn2 "S2: " range:[-1e4,1e4,0] type:#worldunits fieldwidth:70 align:#center
        button bth1 "Create" width:70 align:#center
        on bth1 pressed do (
            b=box name:"Down" width:20 height:30 length:6 pos:[0,0,10]
            a=box name:"app" width:30 height:20 length:8 pos:[0,0,50]
        )
        on spn1 changed val do(
            if (b!=undefined) and (a!=undefined) then(
                b.pos.z=val
                a.pos.z=val+spn2.value
            ) else(messageBox "Error" title:"Oops!")
        )
    )
    createDialog tst
)
 
Последнее редактирование:

Дмитрий мелочь

Пользователь сайта
Рейтинг
4
#3
С тем, что он понятия не имеет что такое а
Я так же не оч представляю по этим кускам, что вы мудрите. Исходя из них,возможно как то так?
Код:
(
    rollout tst "" width:120
    (
        local b,a
        spinner spn1 "S1: " range:[-1e4,1e4,0] type:#worldunits fieldwidth:70 align:#center
        spinner spn2 "S2: " range:[-1e4,1e4,0] type:#worldunits fieldwidth:70 align:#center
        button bth1 "Create" width:70 align:#center
        on bth1 pressed do (
            b=box name:"Down" width:20 height:30 length:6 pos:[0,0,10]
            a=box name:"app" width:30 height:20 length:8 pos:[0,0,50]
        )
        on spn1 changed val do(
            if (b!=undefined) and (a!=undefined) then(
                b.pos.z=val
                a.pos.z=val+spn2.value
            ) else(messageBox "Error" title:"Oops!")
        )
    )
    createDialog tst
)
Я понимаю что он понятия не имеет что такое "а", вопрос почему? почему он не имеет понятия,я ведь указал что то ещё один бокс который создается одновременно с первым, просто я хочу менять их параметры во процессе работы над ними и выскакивает эта надпись что он незнает что это такое...
 

Boro Bum

Пользователь сайта
Рейтинг
4
#4
почему он не имеет понятия,я ведь указал что то ещё один бокс который создается одновременно с первым
Возможно вы не сделали этого явно. Вы создаете две переменные (b и a) и сохраняете в них создаваемые боксы. Но это работает только в "рамках" нажатия кнопки. Т.е от скобки открытия и до скобки закрытия.
Код:
on bth1 pressed do (
    b=box name:"Down" width:20 height:30 length:6 pos:[0,0,10]
    a=box name:"app" width:30 height:20 length:8 pos:[0,0,50]
)
Соответственно при выполнении кода спинера, он не может знать, что в b и a боксы.
Обратите внимание на мой пример, в котором я в начале объявляю две локальные переменные - local b,a.
Они находятся в "рамках" роллаута и результат выполнения bth1 pressed будет хранится в них. И значит обратится к их содержанию я уже могу и из "рамок" spn1.
Для лучшего понимания, почитайте про локальные и глобальные переменные.

я хочу менять их параметры во процессе работы над ними
Может будет гибче отталкиваться от selection? И кстати нейминг боксов у вас почему то жесткий.
 
Последнее редактирование:
Сверху