LAST UPDATE 1998/08/01


『 その7-2 』


 ■ 等加速度運動

 これは自由落下がその代表的な例である。ところで今私はこの原稿を日本で書いている。2週間の日本出張である。加速度を簡単な言葉で説明するのは意外とむずかしい。そこで私は日本開発室で仕事をしている数名に聞いてみたのである。

  : 「加速度って何だ?」
 レンダラー担当氏 :
   「そりゃー速度の微分ですよ。」
   難しい表現なのでボツ。
 モデラー担当氏 :
   「そんな基礎から説明するんですか?」
   逆に質問されてしまった。
 AVチーム 嬢(アダルトビデオではない)
   「加速の度合い。」
   そのままじゃ~
 ついでにマニラへ電話してモーションエディタ担当 氏:
   「Hahaha... 」
という具合でピンと来ない説明ばかりである。やはり他人に頼っても良い結果は生まれない。ということなので私の言葉で説明する。
 重力加速度は 9.8というのは良く耳にする数値である。単位は m/sec だったりする。

時間加速度速度
9.8
9.89.8
9.819.6
9.829.4
9.839.2
 1秒単位での状況を具体的に考えてみよう。まず落下が始まった瞬間は速度=0である。重力は常に働いているから、すぐに動き出す。そして、1秒後にはその速度が9.8m/secになっているのである。そしてその瞬間にもやはり同じだけの重力がかかっているので、さらに1秒後には
    9.8+9.8=19.6m/sec
という速度になっていて、それが永遠と続くのである。これが等加速度運動なのである。ちなみに等速運動の場合の加速度はである。
 ではこれを数式化してみよう。その前にもう一度上の表を確認してもらいたい。3秒後の速度である。29.4m/sec という速度になっている。秒速では実感がわかないので、時速に直してみよう。3600秒で1時間なわけだから、
    29.4×3600 = 105.84Km/h
ではないか。実の事を言うと重力加速というのはスゲー加速だったりするわけだ。重力加速度をそのまま使うと、動きが速すぎて見ててもつまらないので、サンプルゲームでは 0.1になっている。これはどうやって求めたかというと、いろいろ試して 0.1が一番それらしかったという最も確実で、最もデタラメな方法である。
 それから、Y座標系では上がプラスの方向なわけだから、下方向への加速度というのはマイナスの加速という事になる。
    BYspeed = BYspeed - 0.1
    Bpy = Bpy + BYspeed

1行目では加速度(-0.1)を元にして玉のY方向の速度を計算し、2行目でY座標を計算している。



 ■ 弾性衝突

 玉が床に到達すると、跳ね返ったりする。落下してきた玉が突然上方向に動き出すわけだから、速度の符号を反転させてやれば良い。完全に反転する(-1を掛ける)という事は跳ね返る直前と直後の速度の絶対値が同じということで、これは完全弾性衝突とか呼ばれている。本来床で跳ね返った玉は同じ高さまでは戻ってこない。衝突時に玉や床が変形したり、熱になったり音になったりでエネルギーが失われるからである。だから、もう少し正確に物理現象をシミュレートしたいのであれば、掛ける数を-1ではなく-0.8程度にしてやれば良いのかもしれない。
 サンプルのゲームのタイトルシーンを見てほしい。玉の跳ね返る高さが少しずつ低くなっている。ところがコード内ではあくまでも-1を掛けている。ではなぜこういった事がおこるのであろう。これはまさにゲーム屋特有の「ごまかし」もしくは「とりあえず動いてるから良いんでないべか(北海道弁)。」である。この部分のコードは次のようになる。床の高さはY = -2.0としてある。
    If (Bpy < -2) Then
      Bpy = -2: BYspeed = -BYspeed
      Else
image では理由を考えてみよう。図1を見てほしい。上は本当の軌跡であり、下は表示上の軌跡である。表示は1秒間に30回しか行われないため、軌跡は曲線ではない。それと同時に床との衝突判定も1秒間に30回しか行われないために、図を見てもわかる通り玉が既に跳ね返って上方向に動いているときに判定が行われ、Y座標を床の高さである-2に補正してある。ということは、玉が本来あるべき場所よりも少し低い場所へ強制的に移動させられているわけである。


 ■ Mjob=1のコードを完成させる


image
 2つめのif文は玉が右端に行ったときに左側へ動くようにXの速度を反転させている。
 3つめのif文は玉が左端まで戻ってきたときにタイトルロゴを画面奥へ移動して、玉を見えない場所に移動し、Mjobを0にしている。これで、次にタイマーイベントが発生したときには、オープニング画面が再び最初から表示されるのである。






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

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


もどる

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