Torque引擎系列之核心類(ConsoleObject)

來源:互聯網
上載者:User

TGE引擎中,ConsoleObject類是所有核心類的基類,所有在指令碼中用到的類都必須繼承於該類。該類主要提供指令碼動態建立對象、類屬性指令碼初始化等功能。在前面的指令碼入門介紹中,我們知道在TGE指令碼中通過“new”關鍵字來建立動態對象,並進行初始化。那麼在ConsoleObject class中是如何?這一點的呢?

當指令碼想要建立一個對象時會把一個類名字串傳遞到引擎中,比如當指令碼中調用 new Player{}時,類名就是“Player”字串。於是問題就在於怎麼通過這個類名字串new出該類的一個對象。我們很自然的會想到必須建立一個類名和類的關聯表,建立的時候通過類名映射到類,進行建立。TGE引擎的思想基本也是如此,但是在實現上做的很有技巧。
TGE中使用了代理模式,當我們定義一個指令碼類(在指令碼中能夠訪問的類)時,需要加入一個宏:IMPLEMENT_CONOBJECT(className),可不要小看這個宏。通過它,引擎會產生一個代理類,並把這個代理類註冊到一個鏈表中。ConcreteClassRep代理類是一個類模板,模板參數就是實體類的類名。於是,當我們需要建立對象時,只需要通過類名在鏈表中查到給類名對應的代理類,然後通過該代理類利用模板機制就可以進行建立了。
我們在指令碼中建立遊戲對象的同時,必須給對象進行初始化。引擎通過initPersistFields()函數給指令碼公布類屬性介面consoleObject的每個子類都必須重寫該方法。另外我們還可以通過consoleInit()函數給指令碼公布全域變數介面。給指令碼公布類函數使用:ConsoleMethod(className,name,returnType,minArgs,maxArgs,usage1) 宏。公布全域函數使用:ConsoleFunction(name,returnType,minArgs,maxArgs,usage1) 宏。
總結:在TGE中,任何你需要在指令碼中用到的類都必須繼承魚ConsoleObject類,它實現了引擎和指令碼的介面。後面,我會繼續分析它的重要子類。(未完待續)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.