2013-04-02 2 views
1

У меня возникла старая проблема с Maxscripts, которая не работает при первом запуске (с холодного старта), потому что функции должны быть объявлены до их использования.Объявление о начале функции Maxscript

Следующий сценарий потерпит неудачу в первый раз, когда он запускается:

fOne() 
function fOne = 
(
    fTwo() 
) 

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

Мы получаем ошибку: «Тип ошибки: Вызов функции потребности или класс, есть не определено». Во второй раз скрипт будет работать нормально.

Однако, добавив вперед декларацию в скрипт, мы больше не получаем ошибку. Horrah! НО функция больше не вызывается. Бу!

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

fOne() 
function fOne = 
(
    fTwo() 
) 

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

Итак, как форвардная декларация действительно работает в Maxscript?

ответ

1

К моему будущему себя: Держите все на месте. Объявите функцию раздела как (локальную) переменную. Помните о местонахождении в коде, который вы определяете функциями.

(-- 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") 
    ) 
) 
2

вы не можете назвать что-то прежде, чем объявить его ... это не Actionscript ... он работает во второй раз, когда вы запускаете код, поскольку он может найти функцию ...

struct myFunc (
    function fOne = (
     fTwo() 
    ), 
    function fTwo = (
     messageBox ("Hello world!") 
    ) 
) 
myFunc.fOne() 
+0

Ах вы нашли [пример] (http://districtf13.blogspot.co.uk/2011/04/maxscript-function-pre-declaration.html), что я и сделал. В других скобках и запятых должен быть другой способ, кроме функции блокировки. –

Смежные вопросы