云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > CEGUI官方资料翻译-在CEGUI中使用Lua脚本入门

CEGUI官方资料翻译-在CEGUI中使用Lua脚本入门

  • 62 次阅读
  • 3 次下载
  • 2025/6/16 1:09:27

CEGUI官方资料翻译-在CEGUI中使用Lua脚本入门(转) 2010-01-08 16:59

在CEGUI中使用Lua脚本入门

CEGUI所使用的脚本是基于Lua5.0.2 和tolua++ 1.06pre2-1的.

界面的编写很大一部分可以通过脚本来实现.我们可以修改脚本而不必重新编译整个程序,

这就为我们省去了好多时间去设计界面.

目前的Lua脚本模块仍然处于初期的开发阶段。它支持绝大多数的内核系统、基层的窗口类,不过,对于某些特殊的控件目前只能通过属性系统(properties system)来设置。

Ok,我们开始吧!你需要有一定的CEGUI基础,比如初始化、创建窗口等,当然,还要有一定的Lua基础。 初始化

Lua脚本模块囊括了所有的管理类(manager classes),所以可以通过Lua脚本对CEGUI进行简单的初始化.例如: #include \

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”。

通过设置此配置文件,你可以控制在系统创建和销毁的时候是否执行一个脚本。配置文件的内容类似这样:

InitScript=\

TerminateScript=\/>

init_script.lua是在系统初始化时候将要被执行的Lua脚本文件。内容可以是这样:

-- 获取CEGUI singletons

local logger = CEGUI.Logger:getSingleton()

logger:logEvent( \--logger:setLoggingLevel( CEGUI.Informative )

-- 为我们要使用的singletons创建相应的局部变量(非必须) local system = CEGUI.System:getSingleton()

local fontman = CEGUI.FontManager:getSingleton() local schememan = CEGUI.SchemeManager:getSingleton()

-- 载入schemes

schememan:loadScheme( \schememan:loadScheme( \

-- 载入默认字体 local font =

fontman:createFont( \

-- 设置默认鼠标光标

system:setDefaultMouseCursor( \

logger:logEvent( \

并不一定要同时提供初始化和退出脚本,但是,假如你在初始化脚本中申请了全局使用的存储空间,那你就要在退出脚本中释放它(或者在其它合适的地方)。

现在,你学习了怎样用Lua脚本初始化CEGUI。后续教程将更深入的讲解。

CEGUI官方资料翻译-Lua消息处理入门(转) 2010-01-08 17:25 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(\/guiscript.lua\

如果有错误产生,它会抛出一个异常。 用Lua可以这么写:

CEGUI.System:getSingleton():executeScriptFile(%uiscript.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

(\pb->setSize(CEGUI::Size(0.1f,0.1f));

pb->setPosition(CEGUI::Point(0.1f,0.1f));

pb->subscribeScriptedEvent(\

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(\end

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

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

在Layout文件中注册Lua事件处理函数

在Layout文件中绑定用Lua写的事件处理函数是很简单的。看下这个例子吧:

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

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

CEGUI官方资料翻译-在CEGUI中使用Lua脚本入门(转) 2010-01-08 16:59 在CEGUI中使用Lua脚本入门 CEGUI所使用的脚本是基于Lua5.0.2 和tolua++ 1.06pre2-1的. 界面的编写很大一部分可以通过脚本来实现.我们可以修改脚本而不必重新编译整个程序, 这就为我们省去了好多时间去设计界面. 目前的Lua脚本模块仍然处于初期的开发阶段。它支持绝大多数的内核系统、基层的窗口类,不过,对于某些特殊的控件目前只能通过属性系统(properties system)来设置。 Ok,我们开始吧!你需要有一定的CEGUI基础,比如初始化、创建窗口等,当然,还要有一定的Lua基础。 初始化 Lua脚本模块囊括了所有的管理类(manager classes)

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com