Materail 指令碼的設計(JavaScript 3)

來源:互聯網
上載者:User
[img]http://www.blogcn.com/User12/antsam/Upload/20041217142710.jpg [/img]

這是一幅關於JavaScript中四個重要組成的關係:

Runtime、Script、Context和Object

其中有一點必須注意的是:object可以在不同的context之間共用。

在使用JS的過程中你肯定會想到,怎麼樣在一個JS檔案中調用另外

一個JS檔案中定義的函數或變數?

這箇舊需要通過共用一個Object來實現,context使之指令碼執行的

堆棧空間(fixed me),那本指令碼中定義的變數(全域)和函數的

資訊則是儲存在一個Gloabal Object中的,這樣我們只要把兩個腳

本共用一個Object,就可以實現上面的問題了。

例如:

test.js:

var m = 0;

function addValues1(a,b)

{

   result = a + b + m+n;

   m = m + 10;

   return result;

}

test2.js:

var n =100;

function addValues2(a,b)

{

   result = a + b + n;

   n = n + 10;

   result += addValues1(a,b);

   return result;

}

代碼中:

……

jsp1 = JS_CompileFile(ct1, globalObj, "test.js";

JS_ExecuteScript(ct1, globalObj, jsp1, &rval); 

jsp2 = JS_CompileFile(ct2, globalObj, "test2.js";

JS_ExecuteScript(ct2, globalObj, jsp2, &rval); 

……

JS_CallFunctionName(ct1, globalObj, "addValues1", 2, args, &rval);

……

JS_CallFunctionName(ct2, globalObj, "addValues2", 2, args, &rval);

利用這個特性我們可以定義我們指令碼的文法:

在sytax.js檔案中我們定義一些介面(DOM):

BeginMaterial()、EndMaterial()

BeginPass()、EndPass()

然後既可以寫Material的指令碼並執行了:

BeginMaterial()

{

    BeginPass()

    {

        ……

    }

    EndPass()

    BeginPass()

    {

        ……

    }

    EndPass()

}

EndMaterial()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.