Maxscript中是否有一个允许您提前停止脚本的命令?比方说,脚本依赖于将单个对象作为选择。如果没有什么可以选择那么它将无效。
myObj = $
if ($ == undefined) then STOP
-- rest of code
其中STOP表示难以捉摸或虚构的停止命令
而不是像以下那样进行测试:
myObj = $
if ($ != undefined) then
(
--rest of code
)
哪个好,但它确实意味着将大部分脚本放在括号中 - 我发现它使代码成为一个但更难以编辑。
答案 0 :(得分:2)
这取决于你通常可以使用return
强制提前退出。即使在事件处理程序的情况下,它也可以工作,因为它们基本上只是函数:
rollout test "Test"
(
button btn "Exception"
on btn pressed do
(
if selection.count != 1 do
return messageBox "Selection count expected to be one."
if NOT isKindOf selection[1] Editable_poly do
return messageBox "Object not an Editable Poly."
btn.text = selection[1].name
)
)
createDialog test
由于某些实现细节,如果在循环体中或可能多次执行的其他地方使用,它会使整个脚本变慢。
如果您只想退出脚本并仅在监听器中打印信息,throw
可能是一个更好的功能。
if selection.count != 1 do
throw "Selection count expected to be one."
if NOT isKindOf selection[1] Editable_poly do
throw "Object not an Editable Poly"
print selection[1].name
然而,在大多数情况下,您目前使用的是最合适的解决方案。如果你想改进它(特别是如果你发现自己一遍又一遍地编写同一段代码),你可以编写一个类似于Filters
的自定义结构:
#Struct:Filters(
GetModOrObj:<fn>; Public,
Is_EditSpline:<fn>; Public,
CanSwitchTo_Segment:<fn>; Public,
HasBaseObjectProperty:<fn>; Public,
...
Is_EditPolyMod:<fn>; Public,
Is_This_EditPolyObj:<fn>; Public,
Is_EditPatch:<fn>; Public,
CanSwitchTo_Face:<fn>; Public)
答案 1 :(得分:1)
使用exit,这是一个简单的例子:a = 100
while True do
(
a -= 1
print a
if a == 20 do
(
print "a is equal to 20!"
exit
)
)