S.F. Page

Programming,Music,etc...

スカッシュゲームを作る(7) - パドルでボールをコントロールする(2)

前回はパドルのx移動量によってボールの動きを変化させるようにしたが、そうするとボールの移動ベクトルの大きさが変わってしまうので、スピードが変わってしまうのであった。今回はパドルの動きによって変化させるのはボールの角度のみにしようと思う。そうすればゲーム側でボールのスピードによる難易度調整ができるので。 これを実現するにはいろいろやり方はあると思うけど、今回は三平方の定理を使ってみようと思う。

{\Delta{x},\Delta{y}}を2辺とすると、ボールの移動量{v}は直角三角形の斜辺となる。

ので三平方の定理が成り立つ。

{ {v}^2 = {\Delta{x}}^2 + {\Delta{y}}^2 }

ボールの{\Delta{x},\Delta{y}}の大きさはわかっているので、移動量{v}

{ {v} = \sqrt{{\Delta{x}}^2 + {\Delta{y}}^2} }

で求めることができる。

さて、この{v}はパドルとの衝突時にパドルの移動量{\Delta{px}}が逆向きに作用し、{\Delta{y}}が反転する。新しい移動量{v1}を図にすると以下のようになる。

background Layer 1 Δx Δy Δpx v1

図を見てもらうと{v1}{v}は大きさが変わっていることがわかるだろう。{v}が現在のボールのスピード{s}だとすると、スピードを一定となるようにするには{s}{v1}で割り、{\Delta{x},\Delta{y}}それぞれに掛けてやればよい。

デモとソースコード

このボールの動きをみていたらブロック崩しを作りたくなってきた。 スカッシュはこれくらいにして次からはブロック崩しを作ろうと思う。