cegui 9 编写CEGUI脚本入门

本教程通过示例代码介绍如何使用Lua脚本与CEGUI结合进行界面开发,包括调整日志级别、加载Scheme、创建GUI元素及事件处理等。
 
cegui 9 编写CEGUI脚本入门
本教程所列的代码是Lua脚本,它用到了CEGUI0.4版本起所绑定的CEGUILua模块。这些代码片段可能没有多少实际用途,但它们足以展示CEGUILua结合起来使用的可能性。
更改记录级别
 
 local logger = CEGUI.Logger:getSingleton()--获取logger
 local lvl = logger.getLoggingLevel()  --获取记录级别
 
 if    lvl < CEGUI.Insane then
       logger:setLoggingLevel(lvl +1)
 end
此代码:每次增加记录级别一个等级直到到达Insane级别.
载入一个Scheme
CEGUI.SchemeManager:getSingleton():loadScheme("../datafiles/scheme/TaharezLook.scheme")
此代码:载入了TaharezLook.scheme.
 
简单的界面
  1. -- 创建GUI sheet  
  2. local sheet = CEGUI.WindowManager:getSingleton():createWindow(  
  3.                                     "DefaultGUISheet","root");  
  4. CEGUI.System:getSingleton():setGUISheet(sheet) -- 然后,把它附着到系统中  
  1. -- 创建一个FrameWindow  
  2. local fw = CEGUI.WindowManager:getSingleton():createWindow(  
  3.                             "TaharezLook/FrameWindow","framewnd");  
  4. -- 把它附着到sheet上  
  5. sheet:addChildWindow(fw)  
  6.   
  7. -- 设置它的大小和位置  
  8. local sz = CEGUI.Size(0.5,0.5)  
  9. local pos = CEGUI.Point(0.2,0.1)  
  10. fw:setSize(sz)  
  11. fw:setPosition(pos)  
  12. -- 禁止用户改变大小  
  13. fw:setProperty("SizingEnabled","False")  
  14.   
  15. -- 使关闭按钮生效  
  16. fw:subscribeEvent("CloseClicked","fwCloseClicked")  
  17.   
  18. -- CloseClicked事件的处理函数  
  19. function fwCloseClicked(eventArgs)  
  20.     local we = CEGUI.toWindowEventArgs(eventArgs)  
  21.     CEGUI.WindowManager:getSingleton():destroyWindow(we.window) -- 销毁frame窗口  
  22. end  
此代码:创建一个GUISheet,把它附着到System上。然后,创建一个FrameWindow,设置它的大小和位置,禁用更改大小属性并为CloseClicked事件绑定了事件处理函数。
类型转换的另一种方法
  1. -- CloseClicked事件的处理函数  
  2. function fwCloseClicked(eventArgs)  
  3.     local we = tolua.cast(eventArgs,"CEGUI::WindowEventArgs")  
  4.     CEGUI.WindowManager:getSingleton():destroyWindow(we.window) -- 销毁frame窗口  
  5. end  
此代码:展示了把EventArgs对象转换成WindowEventArgs类型的另一种方法。
载入一个layout
  1. local w = CEGUI.WindowManager:getSingleton():loadWindowLayout(  
  2.                         "../datafiles/layouts/test.layout")  
  3. CEGUI.System:getSingleton():getGUISheet():addChildWindow(w)  
此代码:载入了一个layout并把返回的窗口添加到当前的GUISheet中。

弹出菜单
  1. -- 我们将多次使用WindowManager对象  
  2. local wmgr = CEGUI.WindowManager:getSingleton()  
  3.   
  4. -- 设置菜单  
  5. local bar = wmgr:createWindow("WindowsLook/Menubar","the_menu_bar")  
  6. bar:setSize(CEGUI.Size(1,0.1))  
  7. CEGUI.System:getSingleton():getGUISheet():addChildWindow(bar)  
  8.   
  9. -- 添加一个菜单项  
  10. local item = wmgr:createWindow("WindowsLook/MenubarItem","the_menu_bar_item")  
  11. item:setText("Bar item")  
  12. bar:addChildWindow(item)  
  13.   
  14. -- 添加一个弹出菜单到菜单项中  
  15. local pop = wmgr:createWindow("WindowsLook/PopupMenu","the_popup_menu")  
  16. item:addChildWindow(pop)  
  17.   
  18. -- 添加一些菜单项到弹出菜单中  
  19. item = wmgr:createWindow("WindowsLook/PopupMenuItem","the_popup_menu_item_1")  
  20. item:setText("Popup item 1")  
  21. pop:addChildWindow(item)  
  22.   
  23. item = wmgr:createWindow("WindowsLook/PopupMenuItem","the_popup_menu_item_2")  
  24. item:setText("Popup item 2")  
  25. pop:addChildWindow(item)  
此代码:创建了一个简单的菜单,并添加了一个包含两个子菜单的弹出式菜单到它上面。
 
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、付费专栏及课程。

余额充值