第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)

 

マウス操作の右側の()内のうち意味があるのはマウスを操作した位置XYです(横方向が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の中では、マウスを操作した位置がXY(横方向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