在CEGUI中使用Lua指令碼入門

2021-05-22 00:57:17 字數 2113 閱讀 6635

cegui所使用的指令碼是基於lua5.0.2 和tolua++ 1.06pre2-1的.

介面的編寫很大一部分可以通過指令碼來實現.我們可以修改指令碼而不必重新編譯整個程式,

這就為我們省去了好多時間去設計介面.

目前的lua指令碼模組仍然處於初期的開發階段。它支援絕大多數的核心系統、基層的視窗類,不過,對於某些特殊的控制項目前只能通過屬性系統(properties system)來設定。

ok,我們開始吧!你需要有一定的cegui基礎,比如初始化、建立視窗等,當然,還要有一定的lua基礎。

初始化lua指令碼模組囊括了所有的管理類(manager classes),所以可以通過lua指令碼對cegui進行簡單的初始化.例如:

#include "ceguilua.h"

cegui::yourrendererofchoice* renderer = new yourrendererofchoice;  

cegui::luascriptmodule* script_module = new cegui::luascriptmodule();  

// 第二個引數設定xml解析器,0代表預設解析器  

new cegui::system( renderer, 0, script_module ); 

現在cegui::system已經被建立,指令碼模組也被指定了。此時,luascriptmodule的建構函式自動為我們建立了乙個lua_state。你也可以傳遞乙個lua_state*到luascriptmodule的建構函式中來使用自己的lua_state。

如果你在初始化指令碼中用到自定義函式,你就需要這麼做。**如下:

...  

lua_state* s = your_lua_state;  

cegui::luascriptmodule* script_module = new cegui::luascriptmodule(s);  

... 

初始化/退出 指令碼

cegui支援乙個配置檔案。它的檔名是cegui::system的建構函式的乙個可選引數。預設為「cegui.config」。

通過設定此配置檔案,你可以控制在系統建立和銷毀的時候是否執行乙個指令碼。配置檔案的內容類似這樣:

<?xml version="1.0" ?>  

-- 獲取cegui singletons  

local logger = cegui.logger:getsingleton()  

logger:logevent( ">>> init script says hello" )  

--logger:setlogginglevel( cegui.informative )  

-- 為我們要使用的singletons建立相應的區域性變數(非必須)  

local system    = cegui.system:getsingleton()  

local fontman   = cegui.fontmanager:getsingleton()  

local schememan = cegui.schememanager:getsingleton()  

-- 載入schemes  

schememan:loadscheme( "../datafiles/schemes/taharezlook.scheme" )  

schememan:loadscheme( "../datafiles/schemes/windowslook.scheme" )  

-- 載入預設字型  

local font = fontman:createfont( "../datafiles/fonts/commonwealth-10.font" )  

-- 設定預設滑鼠游標  

system:setdefaultmousecursor( "taharezlook","mousearrow" )  

logger:logevent( "<<< init script says goodbye" ) 

並不一定要同時提供初始化和退出指令碼,但是,假如你在初始化指令碼中申請了全域性使用的儲存空間,那你就要在退出指令碼中釋放它(或者在其它合適的地方)。

現在,你學習了怎樣用lua指令碼初始化cegui。後續教程將更深入的講解。

Lua指令碼中使用Unicode

如何在lua指令碼中使用unicode是本文要介紹的內容,主要是來學習unicode在lua指令碼中如何使用,具體內容來看本文詳細內容講解。說說最近的幾個事情 1 project採用lua,ui模組肯定是要徹底使用utf 16的,可是lua不支援,怎麼辦?最後好像是寫了userdata,可以將mul...

Redis中使用lua指令碼

公司中的爬蟲專案作為乙個接盤來的專案,專案中大致流程是,把要抓取的資料匯入到redis中,然後不斷pop再去抓取。為了避免redis中的資料丟失,大哥採取的是先pop再將拿到的資料通過set的形式在redis中記錄下來。redis client redis.redis 127.0.0.1 decod...

在C 中使用LUA

lua.lib庫的使用 便於後期使用 便於開發中的標頭檔案引用 便於mfc工程的開發使用 使生成的是庫,而不用生成可執行檔案,便於其他工程的引用 新增頭檔案目錄,庫目錄 新增鏈結器附加依賴項 初始化lua虛擬機器 state lual newstate if state luaopen base s...