第9回 マウスに反応するキャラクターを作ろう
ゲームでは、マウスを使ってキャラクターを操作することが少なくありません。
(学習目標)マウスを使ってキャラクターを操作するプログラムの書き方をマスターする。
9−1 マウス操作に反応する命令 Sub…End Sub
マウスには次のような機能があります。
(1) クリック
(2) ダブルクリック
(3) ドラッグ(ドラッグ開始、とドラッグ終了がある)
これらの機能を使うには、Sub…End Sub という命令を使います。
プログラムの形は、今まで習ってきたプログラム(メインプログラムと呼びます)に、マウスを操作した時のプログラムを並べて書きます。メインプログラムは最初に動き出し(実行され)、メインプログラムの終わりまで進んでお休みしています。その状態で、マウスを操作(クリック、ダブルクリック、ドラッグ)すると、それぞれの操作に対応したSub…End Sub部が実行されます。
(注意)今まで、配列の宣言にDimを使っていましたが、メインとSub…End Subの両方で使う変数は、配列同様プログラムの始めの方で“Dim 変数名”という風に宣言しましょう(参照g26.vbs)。
先ずは、マーリンをクリックすると手を振るプログラムを示します。
プログラムの上半分は、マーリンを登場させ“僕をクリックして”と言わせる部分です。後半は、マウスをクリックした時のプログラムで、Sub….End Subの中にプログラムを書きます。上の例ではMerlin.Play "Wave"で手を振らせます。
ダブルクリックで動作させるには、Subを次のように書きます。
Sub Merlin_DblClick(CharID,Button,Shift,X,Y)
ドラッグの場合は、ドラッグ開始で動くプログラムと、ドラッグ終了時に動くプログラムを書くことができます。
(ドラッグ開始時)
Sub Merlin_DragStart(CharID,Button,Shift,X,Y)
(ドラッグ終了時)
Sub Merlin_DragComplete(CharID,Button,Shift,X,Y)
マウス操作の右側の()内のうち意味があるのはマウスを操作した位置XとYです(横方向がX、縦方向がY)。それ以外(CharID,Button,Shift)は、おまじないということで、その通り書いてください。
もちろん、マーリン以外のキャラクターを操作したい時は、Merlinを他の名前(例えばPeedy)に代えればOKです。
9−1 色々な機能を使ったマウス操作
ここで少し新しい機能を紹介しながら説明していきます。
(1)時間関連
VBSでは日付、時刻、時間、等を教えてくれる命令があります。
Data:今日の日付
Time:現在の時刻
さらに、現在の時刻の分“分”を知りたければ、Minute(Time)、“秒”を知りたければSecond(Time)とします。これにより、ゲームの時間計測ができます。
(例題)クリックすると、時刻を教えてくれるプログラム
‘===プログラム9.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.Speak "僕をダブルクリックして"
MsgBox "終わり"
Sub Merlin_DblClick(CharID,Button,Shift, X, Y)
Merlin.Speak "いまの時刻は" & Time
End Sub
‘===
(例題)クリックするまでの時間の計測
‘===プログラム9.2
Set Agent1= WScript.CreateObject("Agent.Control.1", "Merlin_")
Agent1.Connected= True
Agent1.Characters.Load "Merlin","Merlin.acs"
Set Merlin= Agent1.Characters("Merlin")
Merlin.Show
'ここから下がプログラム本体
hajime= Second(Time)
Merlin.Speak "僕をクリックして、クリックするまでの秒を言います"
MsgBox "終わり"
Sub Merlin_Click(CharID,Button,Shift,X,Y)
ima= Second(Time)
jikan= ima - hajime
Merlin.Speak jikan
MsgBox jikan
End Sub
‘===
(2)キャラクターの大きさを変える
(例題)キャラクターはクリックで大きくなり、ダブルクリックで小さくなる
‘===プログラム9.3
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.Speak "クリックで拡大"
MsgBox "終わり"
Sub Merlin_Click(CharID,Button,Shift, X, Y)
Merlin.Width= Merlin.Width *2
Merlin.Height= Merlin.Height *2
Merlin.Balloon.FontSize= Merlin.Balloon.FontSize *2
Merlin.Speak "おおきくなったでしょう"
End Sub
‘===
(4) ドラッグと位置XYの利用
マウス操作のSub…End Subの中では、マウスを操作した位置がXとY(横方向X、縦方向Y)に自動的に書かれています。
(例題)マーリンをドラッグして動かしも、マーリンは元の場所にもどります。
‘===プログラム9.4
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.Speak "僕をドラッグしてみて"
MsgBox "終わり"
Sub Merlin_DragStart(CharID,Button,Shift, X, Y)
aX= X
aY= Y
End Sub
Sub Merlin_DragComplete(CharID,Button,Shift, X, Y)
Merlin.MoveTo aX,aY
Merlin.Speak "ここがすきなの!"
End Sub
(おまけ)これはマウスと関係ないんですが、
何もすることが無い時はMerlin.IdleOn= Trueとすると、
Sub MyAgent_IdleStart(CharacterID)…End Subが実行されます。
(例題)何もしない時の繰り返し
‘===プログラム9.5
Set Merlin= Agent1.Characters("Merlin")
Merlin.Show
'ここから下がプログラム本体
Merlin.IdleOn= True
Merlin.Speak "暇なので、適当に動きます。でもWクリックで時刻も教えます"
MsgBox "終わり"
Sub Merlin_IdleStart(CharacterID)
aX= Rnd *1024
aY= Rand*768
Merlin.MoveTo aX,aY
End Sub
Sub Merlin_DblClick(CharID,Button,Shift, X, Y)
Merlin.Speak "いまの時刻は" & Time
End Sub