LAST UPDATE 1998/08/22


『 その10-2 』




 ■ コントロールをDisableにする

 これは、プルダウンメニューによってモードが変わったときに処理すれば良い。 Pu_Mode_Junction_Clickを表示し、以下のコードを追加する。
image129.gif
それから同様にPu_Mode_Xfile_ClickにはDisableを解除するコードを追加する。

image130.gif
これで、Form/KeyDownイベントが確実に発生するようになったのである。


 ■ キーコードの処理

 ↑矢印キーが押された場合のコードを示す。
image132.gif
    If (Mjob <> -1) Then Exit Sub
Mjobが-1以外の時は他のブロックが動いている最中を意味している。その場合はキー入力は無視される。
    Select Case KeyCode
KeyDownイベントが発生するとInteger型でKeyCodeという変数の中に押されたキーの番号が入っている。その内容によって処理を振り分けているのである。
    Case vbKeyUp
ここで再びVBのヘルプを開いてもらいたい。Keycodeを調べてみよう。すると定数名とコードと説明の一覧が表示される。これらはVBが最初から内部に持っている定数なので、自分で定義する必要はない。 VbKeyUpは↑矢印キーとなっているのでそのまま使った方がわかりやすい。
    If (Ez = 5) Then Exit Sub
Ezは空白の前後の座標である。これが5であるということは既にこれ以上動かせないということを意味するので、何も処理せずにこのプロシージャーから戻るのである。
image133.gif
 これはEx=2 Ez=5の状態。これ以上↑キーを押してもブロックを動かすことはできない。
    BlockInfo(Ex, Ez, 0) = BlockInfo(Ex, Ez + 1, 0)
    BlockInfo(Ex, Ez, 1) = BlockInfo(Ex, Ez + 1, 1)
ブロックを動かした後の状態をBlockInfoに格納している。
    CBlk = BlockInfo(Ex, Ez, 0)
あとでMove_Aなどの表示関数で使われるオブジェクトIDを取得している。
    BlockInfo(Ex, Ez + 1, 0) = -1
    BlockInfo(Ex, Ez + 1, 1) = -1
新たな空白部分に、空白を示す情報を格納している。
    BlkDir = 0
ブロックが動く方向を格納している。方向は 0=↑ 1=→ 2=↓ 3=← となっている。
    Mjob = 2
    Ez = Ez + 1
「ブロックが動いている。」という意味のコードを格納して、空白の座標を更新している。
    If ((Ba.bx = Ex) And (Ba.bz = Ez)) Then
     Bmflg = 1: Ba.bz = Ba.bz - 1
ボールが乗っているブロックを動かしたときの処理で、これはボールのコントロールで必要になる。 以下同様ということで、下左右の処理を示す。
image135.gif






その 10 -1 | その 10-2 | その 10-3 | その 10-4 | その 10-5 | その 10-6 | その 10-7

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp