0

我已经在 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() 需要节点或节点集合,得到:“自定义参数”<<

据我所知,我所有的格式都是正确的,那么我还需要做些什么吗?我感谢任何和所有的帮助。谢谢你。

4

1 回答 1

1

这里有几个问题,首先是需要在 rollout 的范围内声明 rollout 控件。Group关键字意味着在该范围之外完全不同的东西(即创建一组节点的命令,这也是错误消息的原因)。您必须以这种方式创建完整的推出(查看推出创建者源代码 - 虽然它本身有很多问题,但没有必要重新发明轮子)。可能长期困扰您的第二个问题是 execute 在全局范围内评估提供的字符串,您未在此处声明但希望访问的每个变量都需要从全局范围和任何新的非嵌套变量中访问也变得全球化。

无论如何,随意使用rollout creator来生成这样的代码片段,其中生成的对话框非常简单,以及任何更动态的 .NET 表单。能够将控件集合作为对象使用,使其更易于管理,但 .NET 的冗长可能有点令人反感。

于 2013-05-31T08:41:12.917 回答