第2回 色々なキャラクターと色々な動作
学習目標:今回の学習目標は次の2つです。
(1) マーリン以外のキャラクターを出現させられるようにする。
(2) キャラクターに色々な動作をさせる。
2−1 マーリン以外のキャラクター
マイクロソフト社は、次の4種類のキャラクターを用意しています。
図2.1 4種類のキャラクター
前回のマーリンを出現させるおまじないの所を、Merlinの代わりにGenieやPeedyにすることにより他のキャラクターを出現させられます。次に4つのキャラクターを出現させるプログラムを示します。
‘===プログラム2.1
''マーリン
Set Agent1= WScript.CreateObject("Agent.Control.1", "Merlin_")
Agent1.Connected= True
Agent1.Characters.Load "Merlin","Merlin.acs"
Set Merlin= Agent1.Characters("Merlin")
Merlin.Show
Merlin.MoveTo 300,200
'ロビー
Set Agent2=Wscript.CreateObject("Agent.Control.1","Robby_")
Agent2.Connected=True
Agent2.Characters.Load "Robby","Robby.acs"
Set Robby=Agent2.Characters("Robby")
Robby.Show
Robby.MoveTo 200,100
'ジェニー
Set Agent3=Wscript.CreateObject("Agent.Control.1","Genie_")
Agent3.Connected=True
Agent3.Characters.Load "Genie","Genie.acs"
Set Genie=Agent3.Characters("Genie")
Genie.Show
Genie.MoveTo 200,300
'ピーディ
Set Agent4=Wscript.CreateObject("Agent.Control.1","Peedy_")
Agent4.Connected=True
Agent4.Characters.Load "Peedy","Peedy.acs"
Set Peedy=Agent4.Characters("Peedy")
Peedy.Show
Peedy.MoveTo 100,200
MsgBox "end"
‘===
2−2 色々な動作をさせよう
前回は、マーリンを動かす命令を使いましたが、マーリンにもっと色々なことをさせましょう。マーリンの動作には大きな動作と、小さな動作があります。
(1) マーリンに大きな動作(現れる、動く、消える、話す、など)をさせる。
大きな動作の命令は、キャラクターの後に“.”を打って次に動作を書きます。
(2) マーリンに小さな動作(まばたき、考える、うなずく、など)をさせる。
小さな動作の命令は、“キャラクター”“.”“Play”“ ”“動作”と順に並べて書きます。
先ずは、色々な動作をさせるプログラムを示しますので、命令の構造を見て下さい。
‘===プログラム2.2
Set Agent= WScript.CreateObject("Agent.Control.1")
Agent.Connected= True
Agent.Characters.Load "Agent"
Set Merlin= Agent.Characters("Agent")
Merlin.Show
'ここから下がプログラム本体
Merlin.Speak "おじぎします"
Merlin.Play "Greet"
Merlin.Moveto 120,200
Merlin.Speak "うなずきます"
Merlin.Play"Acknowledge"
Merlin.MoveTo 240,340
Merlin.Speak "ききみみをたてます"
Merlin.Play "StartListening"
Merlin.Speak "今日は何日だったっけ?"
Merlin.Play "Think"
Merlin.Speak "たしか"&date&"だったね"
Merlin.MoveTo 400,400
Merlin.Speak "発表します"
Merlin.Play"Announce"
Merlin.Speak " おめでとう、表彰します。"
Merlin.Play "Congratulate"
Merlin.MoveTo 300,400
Merlin.Speak "まばたきします"
Merlin.Play "Blink"
Merlin.MoveTo 240,340
Merlin.Speak " 手をふります "
Merlin.Play "Wave"
Merlin.Speak "したをみます"
Merlin.Play"LookDown"
Merlin.Speak "おどろきます"
Merlin.Play "Surprised"
Merlin.Speak "すがたをけして、またあらわれます"
Merlin.Hide
Merlin.MoveTo 100,100
Merlin.Show
Merlin.Speak "探します"
Merlin.Play "Search"
Merlin.Speak "ノックします"
Merlin.Play "GetAttention"
Merlin.Play "GetAttentionContinued"
Merlin.Speak "したをみてまばたきします"
Merlin.Play"LookDownBlink"
Merlin.Speak "左右上下の動作をします"
Merlin.Play "GestureLeft"
Merlin.Play "GestureRight"
Merlin.Play "GestureUp"
Merlin.Play "GestureDown"
MsgBox "終わり"
‘===
(問題2.1)付録Aの色々な命令を使ってマーリンを動かしてみよう。答a21.vbs
(付録A)
このプログラムで示した動作のほかにも色々な動作指令があります。以下に、以前どこかのサイトで入手したもの(どこで手に入れたか分からなくなってしまいました)を示します。そのため、細かな動作は試してみないと分かりません。
(A1)キャラクターの大きな動作の一覧表。
GestureAt:あちらをご覧下さい
Hide :姿を消す
MoveTo x,y[,speed]:座標x,yに移動
Request
Show
Speak:話す
Think:声を出さず、噴出し
Wait
細かな動きの一覧表
(A2).Playに続く小さい動作命令群 (” ”の間に書く)
Acknowledge:うなずく
Alert:警戒
Announce:発表する
Blink:まばたきをする
Confused:困惑する
Congraturate:祝福
Decline:嘆く
DoMagic*:手を振る
DontRecognize:よく分からない
Explain:何か説明するような仕草
Gestue**:左右上下を指し示す
GetAttention:手を振ったり飛び跳ねたりして注意を引く
GetAttentionContinued
GetAttentionReturn
Greet:笑って、手を振る
Hearing*:聞こうとする格好をする
Hide:画面から消える
Idle***
Look**
Move**
Please:喜ぶ
Process:作業中
Processing
Read:読む
ReadContinued
ReadReturn
Reading
RestPose
Sad:さびしい感じ
Search:探してる様子
Searching
Show
StartListening
StopListening
Suggest:こうしたらどう?
Surprised:驚く
Think
Uncertain
Wave:手を振る
Write:書く
WriteContinued
WriteReturn
Writing
(注)上の*マークには次の文字や数字を入れます
(*: 1, 2)、(**:Down, Left, Right, Up)、(***:1_1, 1_2, 2_1, 2_2, 3_1, 3_2)
(付録B)高度なワザ1(中3レベル)RequestとWaitの使い方
MerlinやPeedyといった、いくつものキャラクターを登場させると、それぞれのキャラクターがバラバラに動いてしまいます。そこで、お互いの動作に関連を持たせる命令が必要になります。RequestとWaitが、その働きをします。次のプログラムはMerlinとPeedyの掛け合いを実現しています。
‘===プログラム2.3
'マーリン
Set Agent1= WScript.CreateObject("Agent.Control.1", "Merlin_")
Agent1.Connected= True
Agent1.Characters.Load "Merlin","Merlin.acs"
Set Merlin= Agent1.Characters("Merlin")
'ピーディ
Set Agent4=Wscript.CreateObject("Agent.Control.1","Peedy_")
Agent4.Connected=True
Agent4.Characters.Load "Peedy","Peedy.acs"
Set Peedy=Agent4.Characters("Peedy")
‘ここから本体
Peedy.MoveTo 100,200
Merlin.MoveTo 700,300
Merlin.Show
Set mAction = Merlin.Speak("おーい、まだか")
Peedy.Wait mAction
Peedy.MoveTo 100, 300
Peedy.Show
Set pAction = Peedy.Speak("ごめん")
Merlin.Wait pAction
Wscript.Sleep 1000
Merlin.Hide
Peedy.Hide
MsgBox "end"
‘===
(補)Peedy.Wait mActionは、その上の行の処理が終わるまでPeedyの動作を待たせます。
Wscript.Sleep 1000は、1000ms(1秒)全体の動きを止めます。