LAST UPDATE 1998/07/18


『 その5-4 』



 ■ コーディング:「←」ボタン

 オプションボタンの値は、人間がクリックすることによって変わる。中に黒い点が表示されていれば

    Opt_Mov.Value = True

そうでなければ

    Opt_Mov.Value = False

が入っている。これはVBがやることなので、これらオプションボタンからのイベントにコードを書き込む必要はない。コーディングが必要なのは「↑」「↓」「←」「→」 の キャプションをつけたコマンドボタンのClickイベントである。 では、フォーム上の「←」ボタンをダブルクリックしてコードを呼び出そう。ここにはY軸まわりに10度回転するようにコードが書き込まれている。ここでの新しい機能を整理してみよう。

    Opt_Mov.Value = Trueのとき
    玉を左に移動する

    Opt_Mov.Value = Falseのとき
    さらにOpt_XY.Value = Trueのとき
    玉をY軸回転する

    Opt_XY.Value = Falseのとき
    玉をZ軸回転する

 という場合分けが必要になる。ここでこんがらがった場合は先に進む前にきっちり整理してほしい。この部分は「プログラムの流れ」に関するとても重要な部分なので、「とりあえず」は通用しないのである。
 Opt_Mov.ValueTrueFalseどちらかの値が入っている。このオプションボタンの値はOpt_Rotというボタンの値と連動していて、MovTrueの場合はRotFalseだし、MovFalseの場合RotTureなのである。だから
「Opt_Mov.Value = Trueのとき」というのは「移動が選択されている」という意味で、 「Opt_Mov.Value = Falseのとき」というのは「回転が選択されている」という意味になるのである。では実際にコーディングしてみよう。ここには

    Call Rotate_R(0, 0, 10, 0)
    Call DX_Draw

というコードが書かれていたはずであるがそれを下のように書き換える。

     If (Opt_Mov.Value = True) Then
      Call Move_R(0, -0.1, 0, 0)
     Else
      If (Opt_XY.Value = True) Then
       Call Rotate_R(0, 0, 10, 0)
      Else
       Call Rotate_R(0, 0, 0, 10)
      End If
     End If
     Call DX_Draw

 さて、最初のifである。これはその行の最後にあるThenとそこから2行下のElseと最後から2行目のEnd ifとセットになっている。上のコード内で太文字で書いてあるので参考にしてほしい。この意味を日本語で書くと「もし、ifの後に書いてあることが本当であればThenの後の命令を実行し、違っていたらElseの後の命令を実行しなさい。実行していく過程で、ElseもしくはEnd ifという命令を見つけたら、そこで処理を終え、End ifの後の命令から続けなさい。」になる。太文字のEnd ifの1行上にもEnd ifがあるが、それは太文字のElseの下にあるifの仲間なので、読み飛ばされる。 この流れをもう少しプログラムに関係づけて書くと、
  • 1) もし、Opt_Mov.Value の値が Trueであれば、Call Move_R(0, -0.1, 0, 0)という命令を実行して、玉を左に移動する。
  • 2) そしてOpt_Mov.Value の値がTrueでなかった場合にはElseの次の命令を実行する。
  • 3) Elseの次は再びifなので、Opt_XY.Valueの値を調べる。
  • 4) もし、Opt_XY.Valueの値がTrueであれば、Call Rotate_R(0,0, 10, 0)を実行して玉をY軸回りに10度回転する。
  • 5) Opt_XY.Valueの値がTrueでなかった場合はCall Rotate_R(0, 0, 0, 10)という命令を使って、Z軸回りに10度回転する。
  • 6) Dx_Draw命令を使って描画する。
    7) 以上
ということなのである。
 Ifの後の部分を条件式と呼ぶらしいが、( )で囲んでいる。実の事を言うと、VBの文法上では( )は必要なかったりする。しかし、私は必ず条件式は( )で囲むことにしている。プログラムを少しでも見やすくしようという配慮と、それからVBで作ってみたプログラムがあまりにも実行速度が遅い場合、C++でコーディングすることになるが、移植の際に書き直す個所が減るので便利だったりするという理由がある。
 これはあくまでも私の超個人的な意見なので強くは勧めないが、もしあなたが「どうしてもいやだ」というのでなければ、条件式は固まりごとに( )で囲もう。(弱気な勧め)


 ■ 実行してみる

 さて、できあがったらさっそく実行である。モードを切り替えながら、上下左右のボタンをクリックしてみよう。スンゲーとは思わないか。既にこのプログラムはXファイルビューワーではないか!
 慣れてくるとこの程度のプログラムは5分程度でできるようになる。まさに「電源入れたら5分で3次元。」なのである。
 ところが…このプログラムには欠陥があったりする。
 「移動」にして玉を左右どちらかの端まで移動して、回転させてみてほしい。…そうなのである。回転の中心座標は常に画面の中心に設定されているのである。
 「これは仕様である。」と大威張りしてしまうのも手であるが、ちゃんと回転の中心を設定する命令も用意されているので、説明していくことにする。




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

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


もどる

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