cegui 8
通过CEGUI指定的Lua脚本模块调用此函数就可以执行指定的Lua脚本文件。这意味着:你的程序可以访问脚本中文件定义的函数等所有东西了,当然,被定义为局部范围的除外。
- CEGUI::System::getSingleton().executeScriptFile("../datafiles/scripts/guiscript.lua");
用Lua可以这么写:
- CEGUI.System:getSingleton():executeScriptFile("../datafiles/scripts/guiscript.lua")
- Event::Connection subscribeScriptedEvent(const String& name,
- const String& subscriber_name);
参数name是你要绑定的事件。参数subscriber_name为处理此事件的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);
现在,我们看一下那个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文件所做的事和上面的C++代码是一样的。
在Layout文件中绑定用Lua写的事件处理函数是很简单的。看下这个例子吧: