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)ができる。 これをどのように活用するかは、各自考えて見ましょう^^。
© Copyright 2024 ExpyDoc