cegui 8 Lua訊息處理入門

2021-04-24 05:42:41 字數 3048 閱讀 6946

cegui 8

lua訊息處理入門

把gui的訊息處理從**中分離出來,並交給lua指令碼處理,這樣可以給你的介面帶來很大的靈活性.gui

的相關地東西可以在測試期間很輕鬆的修改.

lua中的負責處理訊息的東西其實只不過是普普通通的只帶乙個引數的lua函式而已.若想用它作事件

處理函式,你必須先在系統中註冊它.所以除非你在初始化指令碼中載入他們,你必須在處理相應事件之前

載入指令碼檔案

有2種載入指令碼檔案的方法:使用c++**或者在初始化指令碼中使用lua**,由於lua函式和相應的c++

函式一一對應,這2種方法看起來很像.

cegui::system::executescriptfile(const cegui::string &filename,const cegui::string& resourcegroup="");

顯然這個函式有兩個引數:檔名和資源組。大多數情況下,可以不用管最後乙個引數。

通過cegui指定的lua指令碼模組呼叫此函式就可以執行指定的lua指令碼檔案。這意味著:你的程式可以訪問指令碼中檔案定義的函式等所有東西了,當然,被定義為區域性範圍的除外。

例如,用c++可以這麼寫:

cegui::system::getsingleton().executescriptfile(

"../datafiles/scripts/guiscript.lua"

);  

如果有錯誤產生,它會丟擲乙個異常。

用lua可以這麼寫:

cegui.system:getsingleton():executescriptfile(

"../datafiles/scripts/guiscript.lua"

)  

指令碼檔案中的全域性**也將被執行,所以要注意對每次執行進行必要的處理(使用乙個計數器fx)。

註冊事件到lua函式

既然我們已經載入了指令碼檔案,下一步就可以繫結事件到指令碼處理函式上了.

繫結lua函式的函式與繫結c++函式的函式名稱不同。

event::connection subscribescriptedevent(

const

string& name,   

const

string& subscriber_name);  

引數name是你要繫結的事件。引數subscriber_name為處理此事件的lua函式的函式名。

呼叫完此函式後,指定的lua函式就將成為那個事件的處理函式。而且它執行起來和c++版本的函式幾乎一模一樣(當然,不同的是:它是lua指令碼)。

如下是繫結pushbutton單擊事件到乙個lua函式上的**片段:

cegui::pushbutton* pb = (cegui::pushbutton*)cegui::windowmanager::getsingleton().createwindow(

"taharezlook/button"

,"lua_powered_button"

);  

pb->setsize(cegui::size(0.1f,0.1f));  

pb->setposition(cegui::point(0.1f,0.1f));  

pb->subscribescriptedevent("clicked"

,"luabtn_clicked"

);  

cegui::system::getsingleton().getguisheet()->addchildwindow(pb); 

這段**將建立乙個簡單的taharezlook按鈕,把它的clicked事件繫結到lua函式luabtn_clicked中,然後把它新增到當前的gui。

現在,我們看一下那個lua事件處理函式:

function luabtn_clicked(e)  

local we = cegui.towindoweventargs(e)  

we.window:settext("handled from lua"

);  

end  

它使得當按鈕被按下時,它的文字會變成「handled from lua」。

我們使用了乙個公用的函式:

cegui.towindoweventargs(e)  

從它的名字可以看出:它把eventargs引數轉換為windoweventargs型別。其他的eventargs型別也有類似的轉換函式。 

在 layout檔案中註冊

lua事件處理函式 在

layout檔案中繫結用

lua寫的事件處理函式是很簡單的。看下這個例子吧:

<?

xmlversion

="1.0"

?>

<

guilayout

>

<

window

type

="taharezlook/button"

name

="lua_powered_button"

>

<

property

name

="width"

value

="0.1"

/>

<

property

name

="height"

value

="0.1"

/>

<

property

name

="xposition"

value

="0.1"

/>

<

property

name

="yposition"

value

="0.1"

/>

<

event

name

="clicked"

function

="luabtn_clicked"

/>

window

>

guilayout

>

這個簡單的layout檔案所做的事和上面的c++**是一樣的。

Lua訊息處理入門

lua訊息處理入門 把gui的訊息處理從 中分離出來,並交給lua指令碼處理,這樣可以給你的介面帶來很大的靈活性.gui 的相關地東西可以在測試期間很輕鬆的修改.lua中的負責處理訊息的東西其實只不過是普普通通的只帶乙個引數的lua函式而已.若想用它作事件 處理函式,你必須先在系統中註冊它.所以除非...

windows程式與vc訊息處理入門概念

while getmessage msg,winmain函式中的迴圈,整個應用程式生存期由getmessage的返回值決定,當其返回0 即wm quit訊息 即結束應用程式。視窗的生成由主函式中呼叫createwindow api函式實現 關閉視窗產生wm close由defwindowproc清除...

lua用UTF 8處理漢字

lua用utf 8處理漢字 utf8的編碼規則 1.字元的第乙個位元組範圍 0x00 0x7f 0 127 或者 0xc2 0xf4 194 244 utf8 是相容 ascii 的,所以 0 127 就和 ascii 完全一致 2.0xc0,0xc1,0xf5 0xff 192,193 和 245...