VB班第四回

VBで始めるプログラミング
エピソード4
復習・キー入力・コントロール配列
復習
「バウンドするピクチャボックス」
ピクチャーボックスのtop/leftを逐次変更して、form1上をバ
ウンドしているように動かすプログラム
使用するオブジェクトのプロパティ値
Form1.Height
Form1の外径縦幅(単位:TWIP)
Form1.Width
Form1の外径横幅(単位:TWIP)
Form1.ScaleHeight
Form1の内径縦幅(単位:scalemodeによる)
Form1.ScaleWidth
Form1の内径横幅(単位:scalemodeによる)
Form1.Scalemode
form1内の座標の単位を指定する
Picturebox1.Top
Picturebox1の縦座標(単位:pictureboxが乗っているオブ
ジェクトのScalemodeによる)
Picturebox1.Left
Picturebox1の横座標(単位:pictureboxが乗っているオブ
ジェクトのScalemodeによる)
復習2
PictureBox1.Top
Form1.ScaleWidth
Form1.Width
Form1.Height
Form1.ScaleHeight
PictureBox1.Left
復習2
(Picturebox1.Top , Picturebox1.Left) = (x,y)
(0,0)
(Form1.ScaleHeight,0)
(0,Form1.ScaleWidth)
(Form1.ScaleHeight,Form1.ScaleWidth)
復習(移動)
ピクチャボックスが右下に動かしたいなら、
10
(100,200)
10
(110,210)
つまり、
Picturebox1.Top=Picturebox1.Top+10
Picturebox1.Left=Picturebox1.Left+10
となる。
跳ね返り
+15
-15
+10
+10
つまり移動量を変数にしてやって、壁に当たった瞬間に、片一方の移動
量変数の正負を反転させてやれば、実現できる。
キー入力
ゲームなどでは必ず使う重要な部分。同時押し、連
打等、以外と考えることは多い。ここでは、ネットでし
らべた方法をひとつ紹介する。これでもまだ、ぎこち
ない動きであるのでさらにうまいやり方がないか、イ
ンターネットでしらべてみよう。
API
VBの機能だけで、だいたいのプログラムは作成できるが、VBだ
けでは実現できない処理がある。
音を鳴らす
スクリーンセーバを作る
これらの機能は、API(Application Programming Interface)を利
用することによって実現できる。これらの機能はWINDOWSが
持っている機能を使わせてもらうような形である。しかしAPIは高
度なことができる代わりにVBの関数ようぃ少し扱い方が難しく、な
かなか利用されないのが現状である。
-32768
今回使うAPI
今回使うAPI関数は「GetAsyncKeyState」というもの。この
使い方を先に述べてしまおう。
If GetAsyncKeyState(vbKeyUp) Then PosY = PosY - 5
If GetAsyncKeyState(vbKeyDown) Then PosY = PosY + 5
If GetAsyncKeyState(vbKeyLeft) Then PosX = PosX - 5
If GetAsyncKeyState(vbKeyRight) Then PosX = PosX + 5
このようにするだけで、入力を検知できる。この
GetAsyncKeyState()が実行されたときに、指定されたキーが押
されていれば、TRUEが返されるような仕組みとなっている。よっ
て、定期的にこの関数は実行する必要がある。
→timer内に記述する必要あり。
注意:全てIF文で書いてください。ELSEにしてしまうと、一度にひとつの
キー入力しか検出できない
API宣言
APIを使うときは、やはり「このプログラムじゃ、APIを使ってるよ」と宣言
する必要がある。APIは、標準モジュールまたはフォームモジュールの宣
言セクションで宣言ができる。(フォームモジュールで宣言した場合、その
フォームでしか使用することはできない→private)。またフォームモジュー
ルでは、宣言文の最初に「private」をつける。
では、GetAsycKeyState()の宣言文は以下のようになる。
標準モジュール内では
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
フォームモジュール内では
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
と宣言する。
APIビュワー
宣言文が長いので、コピペを多用する。そこでVB6.0には標準で、「API
ビューワー」が入っている。
1. APIビューワーを起動
2. [ファイル]-[テキストファイルの読み込み]で、”win32api.txt”を
選択
3. 後は、使用したいAPI関数を入力すれば、宣言文が出てくる。
それを宣言したい場所にコピペ^^
4. APIおっけい!
コントロール配列
いままで、picturebox,textなどは指定の名前しかなかった。たとえば、
Picturebox1、 Picturebox2、 Picturebox3、・・・・
Text1, Text2, Text3, Text4,・・・
などである。しかし、たとえば、たくさんのpictureboxをFOR文などで繰り
返したい場合、これは不便である。そこで、オブジェクトを配列にしてしま
う方法がある。これがコントロール配列である。
オブジェクトが配列であるならば、
FOR i=0 to 100
Picturebox(i).Top= Picturebox(i).Top+10
Picturebox(i).Left= Picturebox(i).Left+10
NEXT
100個のpictureboxを一斉に右下に移動するなんてことも可能になる。
これは便利^^
コントロール配列の作り方
ひとつのオブジェクトを適当な場所に作成し、プロパティを設定したら、それをコ
ピーし、他の場所で貼り付ける。そのとき
「既に同じ名前のコントロール‘enemy_pic’があります。コントロール配列にします
か?」
と聞かれるので、「はい」を押すと、enemy_pic(0),enemy_pic(1)ができる。
これをどのように活用するかは、各自考えて見ましょう^^。