連日ブロック崩しを作っている者です。
前回のトピで、アイテムを時間で効果をつけるという処理を完了できました。
そのあと、ボールの速度を上げる(下げる)方法を聞き、ベクトルを学べと言われたので、
一通り勉強しました。
速度は上がるようになったのですが、問題があります。
ブロック崩しの外枠あたり判定には、「上枠」・「左枠」・「右枠」の三つがあります。
(下はミスになるので、特に関係ないかと…)
速度が上がったあとに、右の枠にあたると、ボールがぶれて下にまっすぐ落ちてしまいます。
試行錯誤はいくらでもしました。でもできませんでした。
結局、諦めてしまったためそのコードはありませんが、
『やっぱり速度をコントロールしたい!!!』と思ったので、
方法を教えてください。
※抽象的ですみません。
みなさんならどうするかという方法を少し教えてください。
ボールの速度変更
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ボールの速度変更
横枠に衝突した場合は、Xベクトルを符号反転すると共にX座標を補正して枠の内側にX座標を書き換えます。
上枠はYに関して同様のことを行います。
こうするだけで反射するはずです。
上枠はYに関して同様のことを行います。
こうするだけで反射するはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ボールの速度変更
速度が上がると一度に移動する距離が大きくなるため、枠を大きく外れめり込みます。Be さんが書きました:速度が上がったあとに、右の枠にあたると、ボールがぶれて下にまっすぐ落ちてしまいます。
すると反射してもまだ枠の外にいるため反射を繰り返し枠の中を移動するわけです。
方法はいくつかあります。
- 反射処理でボールが枠にめり込んでいたら、枠より内側の座標に補正する。
- めり込まないようにボールを細かく動かす。
- ボールが内側から外側に向かって移動しているときだけ反射処理をする。
ベクトルの内積という計算をするとどんな角度同士でも正面方向からの衝突かどうか判断することができます。
ブロック崩しのX/Y座標軸に直交する枠ならifを使って正負の組み合わせを分けても良いと思います。