快捷搜索:

WPF/Silverlight深度解决方案:(十一)与嵌入式脚本语

嵌入式脚本说话能付与我们系统法度榜样加倍强大年夜的机动性与拓展性,以魔兽级的Lua为例,不过200多K的体积却拥有极快的运算速率。在.NET开拓利用中,它可以被广泛的利用到容许Unsafe Code诸如:WinForm、WebForm、WPF等领域,其体现出来的易用性(无须斟酌核心模块繁杂的逻辑,只必要用最简单的脚本去完成指定义务即可)、跨平台性(一次编译经由过程的精确脚本可以随意移植到其他说话系统中)、需求拓展性(在对系统功能的弥补与进级中同样发挥着举足轻重的感化)等使得它遍布于各类开拓领域。

本节,我将向大年夜家解说若何实现WPF与Lua的交互。

首先,我们必要在WPF项目中添加对Lua的引用,大年夜家可以到http://code.google.com/p/luainterface/下载Lua最新的.NET接口。下载下来的压缩包中包孕两个dll,分手是:lua51.dll和LuaInterface.dll,此中lua51.dll是由VC编写封装的,不开源;LuaInterface.dll由C#编写,假如您感兴趣想钻研它,可以经由过程SVN下载其源码:http://luainterface.googlecode.com/svn/trunk/ :

接下来,我以一个游戏中的谈天发言场景为例,首先当然是创建Lua脚本文件(名为Talk.lua),该脚本认真存储谈天内容,同时还要根据传来的参数经处置惩罚后回调给cs后台代码,并终极反应给UI界面。此中最主要的代码段如下:

content = {

[1]="据说你老婆生了波|啊?真的?|真的假的哇?|你们据说没,深蓝色右手近来和施瓦辛格筹备合拍下一部作品,似乎要取名叫:'断肩山'|……";

[2]="握着老婆的手,好象左手握右手;握着蜜斯的手,好象回到十八九;握着女同砚的手,忏悔当初没下手|……";

[3]="前清时期坐鞠问|北洋军中扛过枪|武昌城里落过荒|北伐战斗帮过忙|......";

}

function ShowTalk(i)

_,count=string.gsub(content[i], "|", "|");

RandomTalk(Split(content[i],"|")[math.random(count 1)]);

end

第一个整个变量content为存储不合发言内容的table,我为它定义了3组内容。着末经由过程ShowTalk措施中调用cs后台代码中的RandomTalk措施来实现将发言内容显示到画面上。RandomTalk措施并不属于Lua脚本文件的一部分,而是我们项目后台代码中的一个措施,这里即展示了Lua调用WPF的措施。当然,我们还必要在WPF后台的cs中为该脚本注册此措施才能终极发挥感化:

Lua lua = new Lua();

lua.RegisterFunction("RandomTalk", this, this.GetType().GetMethod("RandomTalk"));

lua.DoFile("Talk.lua");

是不是很简单?仅仅3行代码即完成了Lua的创建与措施注册。那么反过来,我们要若何实现在WPF中调用Lua脚本措施呢?同样仅仅一行代码搞定:

lua.GetFunction("ShowTalk").Call(Convert.ToInt32((comboBox1.SelectedItem as ComboBoxItem).Tag));

经由过程GetFunction措施来运行Lua脚本的ShowTalk措施,此中Call括号中的值为要通报的参数,该措施返回的是一个Object[]工具,即假如脚本中的ShowTalk措施带Return值,那么可以将之获取。是不是很强大年夜?Lua类中还有其他异常多的措施,能够满意各类交互需求,假如大年夜家感兴趣可以自行到网上查询相关应用措施。

着末发一张场景测试截图吧(源码可以到目录中下载):

Lua的优点其实太多,要不人家魔兽怎么会选择它作为御用脚本说话呢?然则因为Silverlight的安然性问题,Lua无法嵌入到Silverlight平台上,该逝世的难道就没折了吗?您是否轻忽了Web上的脚本王者Javascript,认识两者的同伙会发明JavaScript 和 Lua 拥有着惊人相似。那么下一节我将向大年夜家解说若何应用Javascript在Silverlight中实现本节同样的效果,敬请关注。

源码下载

转自:http://www.cnblogs.com/alamiye010/archive/2009/10/12/1581883.html

您可能还会对下面的文章感兴趣: