我已经在Maxscript工作了大约3个月,所以我相当新,我最近遇到了在ms文件中执行字符串的能力,如下所示:
str = "print \"hello\""
execute str
Max Listener会输出“hello”,正如您所料。我正在尝试使用此功能来创建动态卷展栏,为链接到场景中的RailClone对象的每个参数创建一个按钮。 RailClone对象对这个问题并不重要,所以我很确定你不需要知道任何有关它的信息。
无论如何,这是我的代码:
--create an array of button names
btn_names = for p in obj.paname collect ("btn_" + p as string)
str = "group \"Custom Parameters\" \n(\n"
print btn_names
for p in 1 to btn_names.count do
(
str += "button " + btn_names[p] + "\n"
str += "on " + btn_names[p] + " pressed do\n"
str += "try\n(\n" + "\tprint \"hello test\"\n"
str += ")\n" + "catch(messageBox \"Script failed\")\n"
)
str += ")\n"
str = "print \"hello\""
print str
execute str
第一行抓取所有对象的参数,但它最终只是一个字符串数组。我的问题出现在执行行上,输出是:
MAXScript Rollout Handler异常: - 运行时错误:group()需要节点或节点集合,得到:“自定义参数”<<
据我所知,我的所有格式都是正确的,那么我还有其他必须做的事情吗?我感谢任何和所有的帮助。谢谢。
答案 0 :(得分:1)
这里有一些问题,首先是需要在推出范围内声明推出控件。 Group关键字表示在该范围之外完全不同的东西(即创建一组节点的命令,这也是错误消息的原因)。您必须以这种方式创建完整的部署(查看rollout创建器源代码 - 虽然它本身有很多问题,但不需要重新发明轮子)。第二个可能会长期困扰你的问题是,execute会在全局范围内评估提供的字符串,你没有在那里声明但希望有权访问的每个变量都需要从全局范围和任何新的非嵌套变量中访问也变得全球化。
无论如何,您可以随意使用rollout creator来获取这样的代码片段,其结果对话框非常简单,并且可以更加动态地访问.NET表单。能够使用控件集合作为对象使其更易于管理,但.NET冗长可能有点令人反感。