第2回 色々なキャラクターと色々な動作

学習目標:今回の学習目標は次の2つです。

(1)   マーリン以外のキャラクターを出現させられるようにする。

(2)   キャラクターに色々な動作をさせる。

 

2−1 マーリン以外のキャラクター

マイクロソフト社は、次の4種類のキャラクターを用意しています。

   図2.1 4種類のキャラクター

 

前回のマーリンを出現させるおまじないの所を、Merlinの代わりにGeniePeedyにすることにより他のキャラクターを出現させられます。次に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レベル)RequestWaitの使い方

MerlinPeedyといった、いくつものキャラクターを登場させると、それぞれのキャラクターがバラバラに動いてしまいます。そこで、お互いの動作に関連を持たせる命令が必要になります。RequestWaitが、その働きをします。次のプログラムはMerlinPeedyの掛け合いを実現しています。

‘===プログラム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秒)全体の動きを止めます。