发新话题
打印

MSAgent 详细解说(三)

MSAgent 详细解说(三)


三、活灵活现
8 w$ U  S7 R8 E' p  c. s2 D+ |总是看着一个呆头呆脑的东西一动不动,即使是很 Q ,也会有感到多少的厌烦,下面我们就让他动起来。% k- u+ d0 r! ~7 i+ \6 ~& i2 O$ I
这个例子由于调用的是网络文件,所以会慢一点,请耐心等待一下!  
$ A" Y  T$ A9 ~- |  @
3 W9 J" h( b7 {# C
: K! W- _, V$ ~* {+ R  ]% z/ O1 v1 |9 p
object style="visibility:hidden" id="MSAgent" classid="CLSID45FD31B-5C6E-11D1-9EC1-00C04FD7081F"/object 3 D( K6 _9 s& Q# a$ t' Y
script language="JavaScript"+ r0 s! Q. \. ~# L8 \4 ~
//Coded by Windy_sk windy_sk@126.com 20040214  
/ _9 X: }7 [3 W" D: V* _
4 O. i: S' _4 o( uvar Agent = null;0 n% ^# h3 b5 X% N7 g
var AgentID = "Merlin";# x* {4 c5 `: m7 J. F
var AgentACS = "http://agent.microsoft.com/agent2/chars/merlin/merlin.acf";* _* }- V; @' v* ~+ L
var AgentStates = "Showing, Hiding, Speaking, Moving";
/ h! [$ A" X0 L4 y7 |- e9 xvar AgentAnimations = "GetAttention, GetAttentionReturn, Congratulate, Acknowledge, Read, WriteContinued, WriteReturn, wave";
& E- }' H- }9 x/ pvar AgentLoadRequest, AgentStateRequest, AgentAnimationRequest;  + T) `8 V. W5 ]) K' Z4 g

3 w, o- q( H% P6 U- J  AMSAgent.Connected = true;
" |/ D5 i2 y: @% p4 j  |# i$ ?AgentLoadRequest = MSAgent.Characters.Load(AgentID,AgentACS);
/ A: R/ U8 m, ^7 f4 q. |4 p/ c3 RAgent = MSAgent.Characters.Character(AgentID);3 q6 e7 ^* K  F4 }9 I# A
Agent.LanguageID = 0x0409;  
4 n, p0 a- a. O- _: h* r( }- Q5 S$ {: ?. V& m
AgentStateRequest = Agent.get("state", AgentStates);
* ~1 T) I( `% L( w$ S% lAgentAnimationRequest = Agent.get("animation", AgentAnimations);  " U9 Y, r" Q8 }- w  q

, c3 F) w& q& iAgent.Show();
& p; ]7 A8 y4 |  }. ~* f9 V' nAgent.MoveTo(400,300);; b4 E6 T$ {# k
Agent.Play("GetAttention");4 [9 E5 x  ~# v8 v. @
Agent.Play("GetAttentionReturn");- G* g9 n- I# X$ V. f% X
Agent.speak("Hi, may I have your attention, please?");; B' f! ?- d& g  U& ?/ e4 S
Agent.Play("Congratulate");" G1 |8 I. o. H& r. A
Agent.speak("So nice to meet you!");2 l0 I+ Y+ p# C
Agent.Play("Think");( H2 i7 @+ B* S- U3 a- m5 y8 j0 [
Agent.speak("How do think about me?");3 f2 O* k# Y  h( [9 {, ?
Agent.Play("Acknowledge");
2 x- W2 p/ J) j$ c  o' W, G% p: L7 oAgent.Speak("It's very cool, ya?");: a+ ^! z0 g8 \$ n0 p
Agent.Play("Read");1 V4 j- c% F" X, ~
Agent.Play("WriteContinued");
  L, H% i9 y5 V2 l* j& l  f$ CAgent.Play("WriteReturn");# M) O" E: j- ^, Y$ d" {
Agent.Speak("Oh, I have lots of things to do, see you !");
$ J2 e7 f: X. hAgent.Play("wave");
5 ]. R; B# ~# X) i1 J- j7 WAgent.Speak("Bye-bye!");
& R. [6 d7 d# a; EAgent.Hide();
( r# U" g! I) p/ u+ M- e: g( A/script
7 y) |1 C/ N  Z; h2 @4 l   
/ k% c' V( B5 w- u  z2 k: M* k
6 x/ z2 M* z/ U! N7 N 看到没有?其实只要你善于调动它的积极性,MSAgent 也蛮活泼的!信息观察,不难发现,原来让 MSAgent 动起来,也不过就这么简单:
) _: e% H( K+ P5 M6 K# m& l6 n  ?Agent.MoveTo(x, y) 是角色移动到指定的坐标;
3 _% I; ?2 V+ m# r% J1 M2 wAgent.Play(action) 命令角色做某个动作,动作列表见: msdn.microsoft.com/library/default.asp?url=/library/en-us/msagent/deschar_3pgy.asp (这里需要说明一下,不是所有的角色都支持这些动作的,处理方法后面会有说明!)  
' i; m  b5 c0 d: O- w: @! [$ X, k; |& @+ i: s. [" _
Agent.Hide() 隐藏角色(不是释放角色,通过 Agent.Show() 可以再次显示)
% f4 B2 w. ?  M# P7 yAgent.get(Request, list) 预载相关 MSAgent 动画数据,MSAgent人物数据文件支持单结构角色文件(.acs,角色数据与动画数据存于同一个文件),也支持分离结构角色文件(.acf,角色数据存于.acf中,动画数据存于.aca中)。基于本地硬盘和网络调用均可采用这两种模式,当调用网络 acf 文件时,由于角色数据与动画数据分别下载,所以需要预载相关动画数据,使用 acs 文件(一般没有本地 acf 文件的可能性),不需要预载。  
$ j( L% p: I4 n) _9 j
6 P$ f5 _: v  T  r8 OAgentLoadRequest, AgentLoadRequest 和 AgentAnimationRequest 这三个参数本例并没有实际用到,返回应相关操作的状态对象(相当于 readystatus 属性),在调用网络 acf 文件时有比较实际的用途,这个会在后面说明!



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题