LAST UPDATE 1998/07/24


『 その6-6 』



 ■ 物を動かすという行為


 自然界で物体が動くということは、実際に物が動いているのである(←無意味な日本語)。ところが、パソコンの中で物が動いているのはそう見えるだけで、実際に動いているわけではない(←あまりにもあたりまえ)。
 前ページでTimer.Intervalの値を33にしてある。ということは、33msec(1秒に30回)の頻度でしか画面が書き換わらないということなのである。例えば秒速1メートルで移動している自動車があったとする。これを上記の条件で考えた場合、この自動車は1秒間に1メートル移動するわけだから、30回画面が書き換わると1メートル移動していると考えられる。ということは書き換えのたびに、1/30=0.033メートル座標を変えてやれば、そういったスピードで動いている自動車を表現できることになる。
 タイマーイベント内で行う処理というのは、前回の状態から、今回の状態への変化を計算し、オブジェクトの座標や回転角度を設定し直すということなのである。

 ■ Mjob=0のプログラムコード

 Junctionと書いてあるタイトルロゴが回りながら近づいてくる長さは1~2秒で十分である。初期座標は TpZ=-50であるから、毎回1増やしていくと2秒弱でZ座標は0に到達する。これをプログラムで表すと

    Tpz = Tpz + 1
になる。変な数式である。数学の先生に見せたら間違いなく怒られる。「=」は本来左辺と右辺の値が同じという意味であるからして、この式は正しくない。ところが、プログラム上で「=」というのは「←」という意味を持っている。右辺の計算結果を左側の変数に代入するという意味なのだ。この変数の値の動きを追ってみる。

    初期値   -50
    1回目-50+1-49
    2回目-49+1-48
というように、タイマーイベントが発生する毎にTpZの値は1ずつ増加していくのである。
繰り返して書くが、「=」が数式内で使われている場合にその意味は「←」であって、左右が同じという意味ではない。「=」がif (....) Thenで使われている場合は、同じという意味になる。
次は「回る」である。これはZ軸回転であるからして、Zの値を毎回書き換えてやれば良い。

    Taz = Taz + 5
でタイマーイベントが発生するたびに5度ずつ回転する。
 このようにして計算された座標や角度に従って図1の下の方に書かれている命令によって表示が行われるのである。

 ■ タイトルロゴのオブジェクトを止める

 このままでは、いつまでも回りながら手前方向に移動し続け、やがてカメラよりも手前に移動して何も表示されなくなってしまう。それは困るので、TpZの値が0になった時点で止めなければならない。そのためのコードが

    if (TpZ = 0) then Mjob=1
である。これによって次回タイマーイベントが発生した際にはCase 0部分のコードは飛び越され、Case 1のコードが処理される事になる。


 ■ Mjob=1のコード

 TpZの値が0になると、この部分が処理される。ここではZ座標の値はそのままに、Junctionオブジェクトが回転していない状態になるのを待つ。Zの回転角度を360で割って余りが0になるのを待てば良い。余りを求める演算子はModである。
    If ((TaZ Mod 360) = 0) Then ...
でこの条件式が成り立つのを待ってMjobの値を2にして、玉がバウンドするための準備をするのである。ここまでのコードを図2に示すので参考にしてほしい。

image (図2)

 ■ 動作確認

 動作確認して見よう。「だんだんあなたは3次元になる~」である。







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

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


もどる

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