LAST UPDATE 1998/08/15


『 その9-3 』


 ■ ブロックの表示座標の計算

pic1.gif  ブロックの一辺の長さは2である。ブロックは縦横が7×7のサイズである。配列内での添え字が(3, 3)のブロックをだいたい世界の中央に表示したい。ということで表示座標は
    X=(X-3)*2 及び Y=(Y-3)*2
で計算される。それぞれのブロックの中心は座標(0, 0, 0)でモデリングされているからつじつまが合うようになっている。
表示座標の略図を載せてあるので参考にしてもらいたい。



 ■ Build_Stage(Gate0の処理)

image154.gif  Gate0は上につくゲートの処理を右図のようになる。通常ブロック処理のすぐ下に続けてコーディングしてほしい。
    GateCount = 0
その面に配置されているゲートの数は決まっていない。そこで、コード内でカウントしていくためにとりあえずは初期値の0をセットしている。
    For X = 1 To 5
     B = BlockInfo(X, 0, 1)
この部分は上のゲートに関してのみの処理なので、Xの値は1~5までで良い。左端のX=0と右端のX=6には絶対にGate0は配置されないからである。そして、BlockInfoからデータを取り出すときに配列2番目の添え字は0の部分だけを調べれば良い。
    If (B = 20) Then
BlockInfoの内容がGate0を表すコードであるかどうか調べている。
    B = AddMesh("gate0.x", -1, 1)
    BlockInfo(X, 0, 0) = B
    BlockInfo(X + 1, 0, 0) = B
 シーンに Gate0 オブジェクトを追加し、配列にゲートを表すコードをセットしている。Gate0 は横に2ブロック分のサイズがあるので、XとX+1 の2箇所にセットする必要がある。
    Call Move_A(B, (X - 2.5) * 2, 0, -3 * 2)
    Call SetPivot(B, (X - 2.5) * 2, -0.2, -3 * 2)
 読み込んだオブジェクトを所定の位置に配置し、回転の中心を設定している。通常ブロックの場合はゲーム中で回転しないので、SetPivotは必要ない。しかしゲートは玉が通過した後に裏返る。だからこの命令が必要になるのである。
    X = X + 1
 横に2つ分を既に処理してしまったため、For...Nextの次のループでは処理をひとつ飛ばす必要がある。それでXの値をひとつ増やしている。
    GateCount = GateCount + 1
ゲートがひとつ処理されたわけだから、ゲートのカウンターを増やしている。
また、B=20というコードが見つからなかった場合には、この一連の部分は通過しないわけだから、GateCountは0のままになる。

 ■ Build_Stage(Gate1,2,3の処理)

image157.gif  下、左、右のゲート処理用コードを右図に示す。考え方はGate0と全く同じなので特に解説はしない。








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

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


もどる

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