 |
|
 |
|
 |
|
|
|
|
|
在Agent物件下的Characters是一個群集,使用Characters的Load方法,可以指定載入一個.ACS的演員檔案,並建立一個以第一個參數命名的Character物件。不過在Agent的物件類別名稱中,Character的類別名稱是IAgentCtlCharacter,所以如果要宣告一個物件來承接這個Character物件,則必須將物件的類別宣告為IAgentCtlCharacter類別。取得Character物件之後,便可以控制他的一舉一動了。上面的範例中,使用的是Genie.acs檔案,所以呼叫出來的是阿拉丁神燈中的精靈。(如圖9)
載入精靈之後,便可以由你的程式來操控精靈了。可以使用的基本命令如下:
| Show |
顯示你的演員 |
| Hide |
隱藏你的演員 |
| Speak |
讓你的演員說話 |
| Play |
讓你的演員演戲
|
Moveto
|
移動你的演員到新的位置
|
所以你可以使用下面的範例來顯示與隱藏演員:
Genie.Show ==> 顯示演員
Genie,Hide ==> 隱藏演員
酷吧!
除此,你也可以讓你的演員一動到你指定的位置。請注意,Agent的演員其實是由Agent
Server控制的,所以他的位置是以整個螢幕為座標,而不是你的表單。想把演員移動到任何位置,可以使用下面的敘述:
Genie.Moveto 300,200
上面的敘述,將會讓你的演員移動到螢幕座標(300,200)的地方。(如圖10)
|
|
|
|
|
|
接著你就可以讓你的演員說話了。使用Speak方法,可以輕易地讓演員開口,只要將你希望演員說的台詞當成字串,丟給演員就可以了:
Genie.Speak "Hello World!"
Agent Server會自動的將字串轉換成語音輸出(如圖11)。不過,目前只支援英文,所以別輸入了中文,然後在那裡奇怪,為什麼精靈忽然開始念經了。
當演員開始說話時,在演員的身邊會出現一個氣球,像漫畫一樣,你輸入的字串,會直接顯示在這裡。那麼,有沒有辦法可以讓演員說點中文呢?答案是,勉強。你可以讓精靈以羅馬拼音的方式來工作,聽起來就像是老外說中文一樣,怪聲怪調。聲音怪還可以接受,但是氣球裡的文字怎麼辦?
|
|
|
|
|
|
其實在Speak後面的字串可以加上一些特殊的標籤,提供一些額外的功能,例如,在字串中加上"\CHR=Whisper\"的標籤(不含前後的雙引號),可以讓演員用耳語(比較小聲)的方式說話。在眾標籤中,有一個標籤叫做MAP,利用這個標籤,可以使說的話與顯示的文字不一樣。使用下面的敘述:
Genie.Speak "\MAP=""sha sha
ny""=""謝謝你""\"
可愛的精靈會說『謝謝你』,中文喔(如圖12)!而且氣球中顯示的也是『謝謝你』。
除了能說,Agent還能演,在每一個演員檔案中,都定義了這個演員可以演的動作,例如:
Genie.Play "Greet"
Genie.Speak "please take a break, you have working about 40 minutes"
Genie.Play "GreetReturn"
可以讓精靈先對你鞠個恭,說句話,在回到原來的姿勢,不錯吧!(如圖13)
|
|
|
有了上面的幾個基本動作,咱們的程式便可以開工了。為了顧及電腦使用者的健康,每四十分鐘休息一下,所以你可以在程式中加入一個小功能,利用Timer控制項,每四十分鐘讓精靈出來,請主人休息休息,所以下面的程式便可以派上用場了。
Private Genie As IAgentCtlCharacter
Private TBMin As Integer
Const DATAPATH = "\program files\microsoft agent\chars\genie.acs"
Private Sub Agent1_Click(ByVal CharacterID As String, ByVal Button As Integer, ByVal Shift
As Integer, ByVal x As Integer, ByVal y As Integer)
Genie.Hide
End Sub
Private Sub Form_Load()
Agent1.Characters.Load "Genie", DATAPATH
Set Genie = Agent1.Characters("Genie")
TBMin = 40
End Sub
Private Sub ShowTakeBreak()
Genie.Show
Genie.Play "Greet"
Genie.Speak "please take a break, you have working about 40 minutes"
Genie.Play "GreetReturn"
End Sub
Private Sub Timer1_Timer()
Static Min As Integer
Min = Min + 1
If Min >= TBMin Then
Min = 0
ShowTakeBreak
End If
End Sub
|
|
|
|
|
|
|
其在表單中加入一個Agent控制項,以及一個Timer控制項,將Timer的Interval屬性設為60000,所以Timer每隔一分鐘,會送一次Timer
Event,觸發Timer_Timer()的事件程序,程序中只要發現超過40分鐘,便會執行ShowTakeBreak的程序,程序中將會讓一開始在Form_Load中所載入的精靈顯示,鞠躬,說句請休息的話,還原,但是要等到你用滑鼠按一下精靈之後,才會隱藏起來。
嚴格來講,這個程式沒有什麼技巧,純粹是展示Agent的基本功能,筆者希望藉由這個程式,讓大家知道這個有趣的小東西,也許進而可以延伸出一些好玩的創意。文中所提到的Microsoft
Agent的完整文件,你可以在Internet Client SDK中找到,Microsoft Press也將這些文件出版成書了,有興趣的話可以找來參考一下。甚至更進一步的,你也可以建立自己的演員(如果你對3D立體繪圖在行的話),因為在Internet
Client SDK中也提供了編輯器,讓你建立自己的演員檔。
還記得Office 97中的那隻狗嗎?玩過Microsoft
Agent之後,筆者在想,這個跟Office結合起來,似乎更有趣吧,還有,Agent
可以一次使用好幾個演員,如果可以寫一段讓兩個演員說相聲的程式,例如電腦教學,似乎比現在的卡通要好玩多了。(圖14) |
|
|
|
|
|
第 2/2 頁
▲上一頁 |
|
|
|
|
|
|
|
|
|
|
|
|
|