Agent插件浅析
2006-03-26 22:26:18 来源:WEB开发网核心提示: Sad 显示悲伤的动作 Search 显示查找的动作 Searching显示正在查找的动作 Show 显示动画角色 StartListening 显示开始聆听的动作 StopListening显示停止聆听的动作 Suggest显示建议的动作 Surprised显示惊讶的表情 Think 显示思考的表情 Thinkin
Sad 显示悲伤的动作
Search 显示查找的动作
Searching 显示正在查找的动作
Show 显示动画角色
StartListening 显示开始聆听的动作
StopListening 显示停止聆听的动作
Suggest 显示建议的动作
Surprised 显示惊讶的表情
Think 显示思考的表情
Thinking 显示正在思考的表情
Uncertain 显示不确定的动作
Wave 显示致意的动作
Write 显示写的动作
Writecontinued 显示继续写的动作
Writing 显示正在写的动作
WritReturn 显示停止写的动作
当然,我们也可以从http://www.microsoft.com/msagent/downloads/developer.asp网页单击“Download the
Microsoft Agent Character Editor(1Mb exe)”和“Download the Microsoft Agent Linguistic Information
Sound Editing Tool(6.2Mb exe)”下载制作工具,亲自制作自己所钟爱的动画角色形象。
第二步设计应用程序
在PowerBuilder中提供了OLE控件,以便PowerBuilder应用程序能够使用其它开发工具编写的COM组件和ActiveX控件
在使用相关的COM组件和ActiveX控件先,须注册相关的COM组件和ActiveX控件,在PowerBuilder注册控件,可以在PowerBulider
开发环境中,插入OLE控件时,选择Regisiter New进行注册。
Agent控件的主要属性如下表:
属性 用途
Charactors 用于设置与控件相关联的动画角色文件
Connected 用于判别控件是否与Agent服务器相连接
LanguageID 用于设置Agent所使用的语言,目前仅可设置为十六进制的“409”,即“&H409”
Agent控件的主要方法如下表:
方法 用途
Load 用于初始化Agent控件,并加载动画角色数据文件
UnLoad 用于卸载动画角色数据文件
Show 用于显示的Agent动画角色,并可通过参数控制动画角色的显示速度
Hide 用于隐藏的Agent动画角色,并可通过参数控制动画角色的隐藏速度
StopAll 用于停止动画角色的所有动作
Stop 用于停止动画角色的当前动作
MoveTo 用于移动动画角色,可通过参数来设置移动的坐标和移动的速度
Interrupt 用于中断动画角色的动画,在执行一些有持续性的动画动作时,如不
中断该动作即执行下一个动作,会产生异常现象
Wait 用于在多个动画角色间实现相互之间的动作协调
Play 用于执行指定的动画动作,可通过参数来设置动画类型
Speak 用于通过语音合成引擎,实现英语的语音合成输出功能,即只需要输入
英文字符串,Agent即可通过声音输出设备“说话”
Agent控件的主要事件如下表
事件 用途
Show 在Agent动画角色显示时触发,可利用该事件将程序的主界面隐藏
Hide 在Agent动画角色隐藏时触发,可利用该事件将程序的主界面重新显示
在PowerBuilder中实现的步骤如下
1、新建myexample.pbw的工作区;
2、新建myexample.pbt的应用目标,PowerBuilder会自动建立一个pbl库文件以便存放相关的PowerBuilder对象,并建立一个myexample
应用程序对象;
3、新建窗口对象w_example,并在其上放置控件如下表:
控件 控件名称
listbox lb_1
commandbutton cb_1
commandbutton cb_2
ole control ole_1(并插入对应的Agent ActiveX控件)
4、新建菜单对象m_file,并添加相关菜单项如下表:
菜单名 菜单文本 菜单脚本
m_file 文件(&F)
m_fileopen 打开(&O) parentwindow.triggerevent("ue_fileopen")
m_bar1 -
m_fileexit 退出(&E) parentwindow.triggerevent("ue_fileexit")
5、将窗口对象w_example的menuid属性设置为m_file
6、定义窗口w_example的实例变量如下:
privite:
boolean ib_flag
string is_animationname
7、编写窗口w_example相关事件脚本:
open事件脚本如下:
long result,ll
if fileexists(GetCurrentDirectory ( )+"\peedy.acs")=false then
result=messagebox("提示“,"在程序当前目录下没有动画角色文件",stop!)
ib_flag=false
close(this)
else
ib_flag=true
ole_1. O B J E C T.characters.load("CharacterID",GetCurrentDirectory ( )+"\peedy.acs")
ole_1. O B J E C T.characters("CharacterID").languageID=1033
ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
ole_1. O B J E C T.characters("CharacterID").show()
ole_1. O B J E C T.characters("CharacterID").play("Wave")
ole_1. O B J E C T.characters("CharacterID").speak("Hello,Welcome to use The Character Animation Previewer Programm!")
ole_1. O B J E C T.characters("CharacterID").play("Reading")
lb_1.reset()
for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
next
lb_1.selectitem(1)
close事件脚本如下:
if ib_flag=true then
ole_1. O B J E C T.characters("CharacterID").hide()
ole_1. O B J E C T.characters.unload("CharacterID")
end if
自定义事件ue_fileopen的脚本如下:
string docname, named
integer value
value = GetFileOpenName("选择动画角色文件",docname, named, "acs", "动画角色文件(*.acs),*.acs" )
IF value = 1 THEN
ole_1. O B J E C T.characters.unload("CharacterID")
ole_1. O B J E C T.characters.load("CharacterID",docname)
ole_1. O B J E C T.characters("CharacterID").languageID=1033
ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
ole_1. O B J E C T.characters("CharacterID").show()
ole_1. O B J E C T.characters("CharacterID").speak("Hello!")
ole_1. O B J E C T.characters("CharacterID").play("congratulate")
ole_1. O B J E C T.characters("CharacterID").play("Wave")
cb_1.enabled=false
lb_1.reset()
for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
next
lb_1.selectitem(1)
ole_1. O B J E C T.characters("CharacterID").moveto(0,0)
lb_1.setfocus()
end if
自定义事件ue_fileexit的脚本如下:
close(this)
lb_1的clicked事件脚本如下:
cb_1.enabled=true
lb_1的doubleclicked事件脚本如下:
cb_1.triggerevent("clicked")
lb_1的getfocus事件如下:
cb_1.default=true
cb_1的clicked事件脚本如下:
ole_1. O B J E C T.characters("CharacterID").stop
this.title="演示动画角色动作:"+lb_1.SelectedItem ( )
ole_1. O B J E C T.characters("CharacterID").play(lb_1.selecteditem())
cb_2的clicked事件脚本如下:
ole_1. O B J E C T.characters("CharacterID").stop()
8、编写application对象open事件脚本如下:
open(w_example)
更多精彩
赞助商链接