正式发布DuiLib脚本系统 结合angelscript

这篇主要介绍duilib如何使用脚本。

我认为脚本的存在的意义就是补充UI库的不足,与业务逻辑无关的UI操作,都应该在脚本中完成。当然有些经常需要改动的算法,放入脚本中运行,也是挺方便的。

使用中需要注意几点,

1,和所有脚本语言一样,脚本中没有指针,相应的操作是“@”为指针,&为引用。除此之外,和写C++没有什么区别了。

CPaintManagerUI @pManager = btnControl.GetManager();  //获取Manager指针

CControlUI @pControl =  pManager.FindControl("ctrlname"); //没有指针操作符“->”,还是用"."表示。

pControl.SetText("It is me !!!"); //用"."调用成员函数。

2,不提供Shared与否的方式,脚本文件必须一次性载入,统一放在主窗口xml头部。脚本内容不能嵌套在布局文件中。

    <Window>
    <Include source="config.xml" />
    <script source="testbutton.as" />
    <script source="customlabel.as" />
    <VerticalLayout>
    ..............
    </VerticalLayout>

接下来演示一下,脚本运作方式。以下面这个窗口为例,我们希望在button上面显示一个时钟。

正式发布DuiLib脚本系统  结合angelscript

1,新建脚本文件 testbutton.as,插入2个函数

bool On_Control_Init(CControlUI &obj)
bool On_Control_Event(CControlUI &obj, TEventUI &ev)

正式发布DuiLib脚本系统  结合angelscript

2,书写脚本内容,函数名一般要改一下。

bool OnTestButtonInit(CControlUI &obj)
{
	obj.SetTimer(1,1000); //创建定时器
	return true;
}
bool OnTestButtonEvent(CControlUI &obj, TEventUI &ev)
{
	if(ev.Type == UIEVENT_TIMER) //在定时器事件中,更新显示文本。
	{
		datetime dt;
		dt.GetCurrentTime();
		SetText(dt.Format("%Y-%m-%d %H:%M:%S"));
	}
	return false;
}

3,在设计器中关联函数

正式发布DuiLib脚本系统  结合angelscript

4,把脚本文件放到xml中

<?xml version="1.0" encoding="UTF-8"?>
<Window size="522,400" sizebox="0,0,4,4" caption="0,0,0,20" showshadow="true" shadowsize="2" shadowposition="2,2" shadowcolor="0xFF4B4B4B">
	<Include source="config.xml" />
	<script source="testbutton.as" />

5,设计器中测试窗口。可以看到窗口中一秒更新一次时间显示。

正式发布DuiLib脚本系统  结合angelscript

脚本演示大概就是这样子了。

设计器带的脚本编辑有语法提示,写起来不是太困难。经过我一顿骚操作,大量的模板+宏,注册控件很简单了,工作量也很少,只是要经过无脑复制粘贴无数次。不知道为什么DuiScript这个工程Release编译时间要很长,Debug编译只要几秒钟,哪位高手帮我看看是什么原因。

其实加入脚本系统,并不难,难的是工作量。Python首先不考虑,因为需要安装环境,需要安装环境的都不考虑。lua不要安装环境,但是注册函数太过麻烦了,再说了它和C++语法相差太远了。

angelscript官方主页

http://www.angelcode.com/

代码共享地址:

https://gitee.com/Liqs99/DuiLib_DuiEditor

https://github.com/xfcanyue/DuiLib_DuiEditor

duilib设计器交流群:819272442

上一篇:nim_duilib之virtualListbox用法(22)


下一篇:项目之动态图片的制作