2

我遇到了 Maxscripts 第一次运行(从冷启动)时无法工作的老问题,因为需要在使用函数之前声明它们。

以下脚本将在第一次运行时失败:

fOne()
function fOne = 
(
    fTwo()
)

function fTwo = 
(
    messageBox ("Hello world!")
)

我们得到错误:“类型错误:调用需要函数或类,得到:未定义”。第二次,脚本将运行良好。

但是,向脚本添加前向声明后,我们不再收到错误消息。霍拉!但是不再调用该函数。嘘!

-- declare function names before calling them!
function fOne = ()
function fTwo = ()

fOne()
function fOne = 
(
    fTwo()
)

function fTwo = 
(
    messageBox ("Hello world!")
)

那么,前向声明在 Maxscript 中是如何工作的呢?

4

3 回答 3

2

你不能在声明它之前调用它......它不是动作脚本......它在你第二次运行代码时工作,因为它可以找到函数......

struct myFunc (
    function fOne =  (
        fTwo()
    ),
    function fTwo =  (
        messageBox ("Hello world!")
    )
)
myFunc.fOne()
于 2013-04-02T11:54:25.357 回答
2

对我未来的自己:保持一切本地化。将截面函数声明为(局部)变量。注意定义函数的代码中的下落

( -- put everything in brackets

    (
    -- declare the second function first!
    local funcTwo

    -- declare function names before calling them!
    function funcOne = ()
    function funcTwo = ()

    funcOne()

    function funcOne = 
    (
    funcTwo()
    )

    function funcTwo = 
    (
    messageBox ("Hello world")
    )
)
于 2013-04-15T08:49:40.843 回答
1

"::" 是关键。遗憾的是,这不是一个众所周知或记录在案的功能。 http://lotsofparticles.blogspot.ie/2009/09/lost-gems-in-maxscript-forcing-global.html

::fOne() -- this will error if forward declaration is not working.

function fOne = 
(
    ::fTwo()
)

function fTwo = 
(
    messageBox ("Hello world!")
)
于 2015-11-16T17:30:29.007 回答