cegui 8 Lua消息处理入门

 
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++可以这么写:
  1. CEGUI::System::getSingleton().executeScriptFile("../datafiles/scripts/guiscript.lua");  
如果有错误产生,它会抛出一个异常。
Lua可以这么写:
  1. CEGUI.System:getSingleton():executeScriptFile("../datafiles/scripts/guiscript.lua")  
脚本文件中的全局代码也将被执行,所以要注意对每次执行进行必要的处理(使用一个计数器fx)。
注册事件到Lua函数
既然我们已经载入了脚本文件,下一步就可以绑定事件到脚本处理函数上了.
绑定Lua函数的函数与绑定C++函数的函数名称不同。
  1. Event::Connection subscribeScriptedEvent(const String& name,   
  2.                                 const String& subscriber_name);  

参数name是你要绑定的事件。参数subscriber_name为处理此事件的Lua函数的函数名。

 

 
调用完此函数后,指定的Lua函数就将成为那个事件的处理函数。而且它运行起来和C++版本的函数几乎一模一样(当然,不同的是:它是Lua脚本)。

如下是绑定PushButton单击事件到一个Lua函数上的代码片段:

  1. CEGUI::PushButton* pb = (CEGUI::PushButton*)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button","lua_powered_button");  
  2. pb->setSize(CEGUI::Size(0.1f,0.1f));  
  3. pb->setPosition(CEGUI::Point(0.1f,0.1f));  
  4. pb->subscribeScriptedEvent("Clicked","luabtn_clicked");  
  5. CEGUI::System::getSingleton().getGUISheet()->addChildWindow(pb); 

 

这段代码将创建一个简单的TaharezLook按钮,把它的Clicked事件绑定到Lua函数luabtn_clicked中,然后把它添加到当前的GUI

现在,我们看一下那个Lua事件处理函数:

  1. function luabtn_clicked(e)  
  2.   local we = CEGUI.toWindowEventArgs(e)  
  3.   we.window:setText("handled from Lua");  
  4. end  

它使得当按钮被按下时,它的文本会变成“handled from Lua”。
我们使用了一个公用的函数:

  1. CEGUI.toWindowEventArgs(e)  

从它的名字可以看出:它把EventArgs参数转换为WindowEventArgs类型。其他的EventArgs类型也有类似的转换函数。 

Layout文件中注册 Lua事件处理函数
Layout文件中绑定用 Lua写的事件处理函数是很简单的。看下这个例子吧:
  1. <?xml version="1.0"?>  
  2. <GUILayout>  
  3. <Window Type="TaharezLook/Button" Name="lua_powered_button">  
  4. <Property Name="Width" Value="0.1" />  
  5. <Property Name="Height" Value="0.1" />  
  6. <Property Name="XPosition" Value="0.1" />  
  7. <Property Name="YPosition" Value="0.1" />  
  8. <Event Name="Clicked" Function="luabtn_clicked" />  
  9. </Window>  
  10. </GUILayout>  

这个简单的layout文件所做的事和上面的C++代码是一样的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk)是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,比如OGRE、Irrlicht和RenderWare等,关键需求可以简化为二点: 纹理(Texture)的支持直接写屏(RHW的顶点格式、正交投影、或者使用shader实现) 本书截止日时,CEGUI的最新版本是0.6.0(本书的讨论也是基于此版本),本书光盘提供了SDK和全部源码的下载。 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor和ImageSet编辑器,以方便UI和图像集的制作。作为界面编辑器,它需要系统级界面以提供编辑器操作,0.3.0版是基于MFC实现的;而在0.4.0版本以后,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见http://www.wxwidgets.org)实现。 目前将CEGUI作为游戏界面库开发的游戏已经有好多种,国内的天龙八部,巨人等游戏就是很好的例子。 CEGUI的功能是非常强大的,而且使用也非常的灵活,可以和脚本配合。可以通过配置文件自定义窗口外观。通过布局文件实现窗口布局等等特性,使得游戏的界面开发更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值