2016-09-17 66 views
0

我有一个控制器对象,我将其他助手节点附加为弱引用。该脚本收听这些其他节点的变换事件,然后做东西..如何判断脚本对象何时被删除?

问题是,当我删除控制器对象时,我无法停止WHEN监听器。

  1. “on delete”子句在gc基本上需要时触发,通常只有在我关闭max后触发。
  2. 在正确的时间nodePreDelete事件触发,但运行在全球范围内,我不知道如何找到我真正需要
  3. “当这个删除”不执行任何脚本实例,值得一试我猜

与此同时,我不能在后台永久性地将在脚本中运行的脚本转换为脚本,它看起来像这样一个简单的概念,有没有办法做到这一点?

回答

-1

如果你正在做的事情你不应该在脚本控制器中按名称列出对象。您应该创建参数并直接添加节点。

然后,您可以使用isValidNode nodeParam并在尝试使用它之前检查它是否有效。

0

---编辑---- 你能更准确地概述你在做什么吗?因为在重读这篇文章之后,我很不清楚你是如何处理你的通知的;我认为你使用的是脚本控制器,但似乎你正在使用when构造......你能发布一些引发问题的片段。

---编辑----

有几种方法可以在maxscript中处理它。其中没有一个是干净的...

可能至少可以帮助您避免错误垃圾邮件的一种方法是将您的脚本代码封装在try/catch中。你的捕捉应该使脚本控制器“归零”,甚至可以向监听者发出警告。

作为一个简单的FYI,referenceTarget/referenceMaker接口似乎专门用于处理这类事情。 MAxscript遗憾地没有实现这个,AFAIK。

http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_1395FB57_C374_4DDF_B3E1_56492DBC27A4_htm

+0

在MAX几乎一切是referenceTarget因而referenceMaker。这是最大的scenetree。通知更多用于UI更新。 –