MSAgent 详细解说

2016-02-19 11:42 6 1 收藏

今天图老师小编要向大家分享个MSAgent 详细解说教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - Web开发 】

本文完全原创,所有参考都是
msdn.microsoft.com/library/en-us/msagent/agentstartpage_7gdh.asp
下面的相关 API 说明,属于共享文章,欢迎以任意种形式的转载,如果您要引用本文文字,请注明作者:windy_sk windy_sk@126.com,谢谢!
欢迎注名转载,鄙视低级抄袭!
引子:
本来两年前就打算写了,结果拖了这么长时间,近日看到有朋友问及相关的东西,终于决定在还没有完全遗忘之前把自己残存的记忆表达出来,纸、笔...写!
不要说你完全了解 MSAgent,可能你对它的认识也不过是知道而已~~~~~~~~
开篇:
可能 MSAgent 这个名字你不清楚,但如果提起 Office 助手我想在这个目前 MicroSoft 独霸天下的电脑世界应该鲜有人不知道,本文就是交给你如何在网页中调用这个在线尤物。
入题:
一、抛砖引玉
首先,我们先来看一下一个最简单的效果:


看到没有,如果顺利的话,你的屏幕上会出现一个很 Q 的卡通魔法师。对,这就是传说中的 MSAgent !下面讲解一下各个部分的作用:

AgentID 内部索引字串,由用户定义;
AgentACS 所调用的角色文件,可以为浏览者本地或远程文件,后面会有单独的部分说明。
MSAgent.Connected 建立连接;
MSAgent.Characters.Load 读取角色;
MSAgent.Characters.Character 返回角色对象;
Agent.Show 显示角色;
好了,我现在已经把 MSAgent 带到你面前了。什么?什么东西都没看到?只有浏览器的报错!没关系,在后面的文章里,我也会告诉你如何才能看到他,当然,这个看到指的是所有浏览你网页的人!

二、伶牙俐齿
下面,我们就让他来做一点实际的东西 —— 说话!还是接续上例:


Merlin 说话了(如果要读出声音来的话,需要客户端在 MicroSoft 的网站上下载并安装相应的语音引擎)!这里涉及到这么几个新的东西:

Agent.LanguageID 声明语言种类,0x0409是英文的编号(有关语言编号请参考 www.microsoft.com/globaldev/reference/oslocversion.mspx ),目前如果没有这个声明,或声明为错误的语种,则语言只是一次性完全显示Agent.Speak() 和 Agent.Think() 是 MSAgent 的两个语言表达显示行为,只有显示图形的区别。
了解了这些功能,是不是正在陶醉呀?别急,还有更好的东西呢!
三、活灵活现
总是看着一个呆头呆脑的东西一动不动,即使是很 Q ,也会有感到多少的厌烦,下面我们就让他动起来。
这个例子由于调用的是网络文件,所以会慢一点,请耐心等待一下!

 
看到没有?其实只要你善于调动它的积极性,MSAgent 也蛮活泼的!信息观察,不难发现,原来让 MSAgent 动起来,也不过就这么简单:
Agent.MoveTo(x, y) 是角色移动到指定的坐标;
Agent.Play(action) 命令角色做某个动作,动作列表见: msdn.microsoft.com/library/default.asp?url=/library/en-us/msagent/deschar_3pgy.asp (这里需要说明一下,不是所有的角色都支持这些动作的,处理方法后面会有说明!)

Agent.Hide() 隐藏角色(不是释放角色,通过 Agent.Show() 可以再次显示)
Agent.get(Request, list) 预载相关 MSAgent 动画数据,MSAgent人物数据文件支持单结构角色文件(.acs,角色数据与动画数据存于同一个文件),也支持分离结构角色文件(.acf,角色数据存于.acf中,动画数据存于.aca中)。基于本地硬盘和网络调用均可采用这两种模式,当调用网络 acf 文件时,由于角色数据与动画数据分别下载,所以需要预载相关动画数据,使用 acs 文件(一般没有本地 acf 文件的可能性),不需要预载。

AgentLoadRequest, AgentLoadRequest 和 AgentAnimationRequest 这三个参数本例并没有实际用到,返回应相关操作的状态对象(相当于 readystatus 属性),在调用网络 acf 文件时有比较实际的用途,这个会在后面说明! 

四、改头换面
MSAgent = Merlin ? 错!MSAgent 是指一系列动画人物的总称,最常见的 office 中的那些活宝,各位应该都熟悉吧?先来看看下面的这个例子:


看到没有? 原来 MSAgent 还有这么多可爱的造型呢!上面的例程中,我定义了一个读取角色的函数 LoadAgent ,通过这个函数更换角色,其中的大部分的功能在前面的章节中已经介绍了,这里仅仅说明一下,新的方法:

MSAgent.Characters.Unload() 卸载角色,其中 AgentID ,必须是 MSAgent.Characters.Load() 中声明过的

Agent.MoveTo() 这个方法上一节中介绍过,但是如果把它放在 Agent.Show() ,则相当于定义角色的出现位置

其实,MSAgent 绝对不仅仅是那么多,但是 MicroSoft 的官方网站上只提供了那么多……怎么办?可以从他的网站上连接角色,当然可可以从你的网站上呀!你可以在这里 www.microsoft.com/msagent/downloads/user.asp 下载官方角色以及语音引擎(可惜没有中文);当然,如果你有兴趣的话也可以开发一个属于自己的 Agent ,相关开发工具 www.microsoft.com/msagent/downloads/developer.asp ,网上也有很多高手做好的动画人物,推荐一个网站 www.msagentring.org/chars.htm 你也可以自己搜索一下。

安装后角色文件存放在 %WINDOWS%msagentchars 目录下的 *.acs 文件,上传到服务器上,直接引用到那个路径就可以了!(你也可以在你的硬盘里搜索一下 *.acs 会有不小的收获呦)这里要说明一下,请自行更改程序中标明网络路径的相关语句,且注意扩展名是 .acs !

如果要让本机支持相应的 MSAgent ,也就是说不用网络调用,只要把 *.acs 文件 copy 到 %WINDOWS%msagentchars 目录就可以了,但如果是 *.exe 的安装文件,则会自动把角色文件放置到相应的路径下。 

五、排难解错
能否显示 MSAgent 的关键在于是否安装了 MSAgent 的核心组件
( Microsoft Agent core components - activex.microsoft.com/activex/controls/agent2/MSagent.exe ),但是如何让这一被动行为变为主动呢?可以用下面两种方法:

方法一:
运行代码框 


特点:自动下载组件并安装,比较方便,但会下载的等待时间不会提示,在网速慢的时候会以为页免死掉,且不是很方便控制。
方法一:


特点:方便出错控制,用户控制下载,但是不能当时显示,需要安装后再次刷新页面。

使用哪种方法就属于见仁见智了,但是最不明智的方法就是两种方法一起上,实践证明 CodeBase 会先于 onerror 生效!

不管怎么说,调用本地角色也比网络角色速度上要快得多,但是你如何预知客户端是否安装了该角色呢?看看下面的例子:

 
通过设置错误捕获,可以方便的找到调用 MSAgent 的最佳方式,当然,你还可以通过 DHTML 加上相应的角色下载链接,并指导用户将 *.acs 文件 copy 到相应目录(%WINDOWS%msagentchars)或直接安装 *.exe 的角色安装文件以方便下次浏览,我仅仅是为你提供一个思路,具体实践还是自己发挥吧!

六、事件响应
像所有 OOP 一样,MSAgent 也设置有相应的事件响应,看看下面的例子,试试在角色或任务栏的图标上点击鼠标(单/双击),你也可以移动一下角色,看看它有什么反应:


是不是感觉交互性强了许多?我们来看一下事件处理的声明方法:
Script Language="JavaScript" For="MSAgent_Object" Event="Event_Name()"
//code...
/Script

熟悉一点 JS 编程的应该不会陌生这种声明方式,也就是对某一对象某一事件的单独处理的声明方法,但是如果是该成 MSAgent_Object.Event_Name = function() {//code...} 的事件处理声明是不可以的!(the only way to do this)

如果是采用网络调用的话,如果向用户通知相应的调用进度呢?


注意到窗口底部状态栏的显示了吗?虽然无法获取具体的下载进度,但是至少也可以让浏览者知道角色的动作为什么会有停顿(这个停顿只在某动画第一次调用的时候出现,调用后该动画会被缓存)。
更多的事件说明请参看 msdn.microsoft.com/library/en-us/msagent/paface_2xet.asp 但是浏览器所调用的 MSAgeng 对象并不是所有的事件都支持。









来源:http://www.tulaoshi.com/n/20160219/1598266.html

延伸阅读
随着设计素材的丰富,现在设计师可以有越来越多的选择,不过有时候过多的元素在设计并不能起到画龙点睛的作用,相反经常会发现一些排版设计十分杂乱,虽然素材都很精美,这也就能看出对于任何设计来说,排版的好坏可以起到很大的作用,本文主要围绕排版的话题进行探讨,以及分享一些设计技巧与方法。 名片:重复形状 努比优格(Nubi Yogu...
标签: windows 操作系统
一、控制台应用详解 1.安装使用故障恢复控制台 使用命令恢复控制台有两种方式,一是用Windows XP启动光盘引导,然后启动的时候选择用命令恢复控制台修复;二是在XP运行的时候安装。具体方法:先将Windows XP安装启动盘插入光驱,在开始菜单中选择运行(或按Win 键+R)打开运行对话框,输入命令X\1386\WINNT32.EXE /CMDCONS(其...
标签: 电脑入门
设置行距可以让Word中的文字排版达到自己想要的效果,比如有时候文字占用段落太长,我们可以将行间距缩短,文字排列更紧密,这样段落自然就会缩短一点。有时候又希望文字排列更加松散一点,这时我们可以将文字之间的距离拉开一点来达到想要的效果!前面详细讲解过Word2003中怎么样调整行距 的方法。本次再来重点讲解下在Word2007中操作方法,其...
标签: 网络游戏
《神仙道》伙伴百炼壶进阶详细攻略解说 1、玩家需通关月牙城冰晶河1,开放百炼壶功能 2、壶中界,当前阵上的伙伴会在壶中界出现 3、指定可升级的伙伴,赠送喜好品,可获得伙伴的好感度。好感度满之后后,伙伴将可以升级成紫色伙伴。 4、使用玉牌炼化喜好品。紫玉牌有概率炼化出喜好品古琴,黄玉牌有概率炼化出喜好品古琴、盘古斧、红...
《骑马与砍杀战团》游戏几个设定详细解说 在骑砍奋斗了百多天(游戏时)......萨国众老大们强塞给我很多领地.税收上不来,穷死我了......   好吧~虽然才100多天,但是还是狠有点心得,发现大家都觉得有些设定很bug,但是我反复研究后,发现不少设定还是不错的.   首先是一个小修改,可以让你的npc不离队triggers.txt里查找   1224...

经验教程

75

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部