ページ 11

ボールの速度変更

Posted: 2011年12月26日(月) 13:06
by Be
連日ブロック崩しを作っている者です。

前回のトピで、アイテムを時間で効果をつけるという処理を完了できました。
そのあと、ボールの速度を上げる(下げる)方法を聞き、ベクトルを学べと言われたので、
一通り勉強しました。

速度は上がるようになったのですが、問題があります。
ブロック崩しの外枠あたり判定には、「上枠」・「左枠」・「右枠」の三つがあります。
(下はミスになるので、特に関係ないかと…)
速度が上がったあとに、右の枠にあたると、ボールがぶれて下にまっすぐ落ちてしまいます。
試行錯誤はいくらでもしました。でもできませんでした。
結局、諦めてしまったためそのコードはありませんが、
『やっぱり速度をコントロールしたい!!!』と思ったので、
方法を教えてください。

※抽象的ですみません。
 みなさんならどうするかという方法を少し教えてください。

Re: ボールの速度変更

Posted: 2011年12月26日(月) 14:50
by softya(ソフト屋)
横枠に衝突した場合は、Xベクトルを符号反転すると共にX座標を補正して枠の内側にX座標を書き換えます。
上枠はYに関して同様のことを行います。
こうするだけで反射するはずです。

Re: ボールの速度変更

Posted: 2011年12月26日(月) 15:06
by ISLe
Be さんが書きました:速度が上がったあとに、右の枠にあたると、ボールがぶれて下にまっすぐ落ちてしまいます。
速度が上がると一度に移動する距離が大きくなるため、枠を大きく外れめり込みます。
すると反射してもまだ枠の外にいるため反射を繰り返し枠の中を移動するわけです。

方法はいくつかあります。
  1. 反射処理でボールが枠にめり込んでいたら、枠より内側の座標に補正する。
  2. めり込まないようにボールを細かく動かす。
  3. ボールが内側から外側に向かって移動しているときだけ反射処理をする。
3番(場合によっては2番と併用)が応用が効くのでお勧めです。
ベクトルの内積という計算をするとどんな角度同士でも正面方向からの衝突かどうか判断することができます。
ブロック崩しのX/Y座標軸に直交する枠ならifを使って正負の組み合わせを分けても良いと思います。

Re: ボールの速度変更

Posted: 2011年12月27日(火) 08:50
by Be
みなさんありがとうございました。
ひとつひとつ試していきたいと思います。

情報提供感謝します。
がんばります。また、問題が起きたら教えてください。