ボールの速度変更

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Be

ボールの速度変更

#1

投稿記事 by Be » 14年前

連日ブロック崩しを作っている者です。

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボールの速度変更

#2

投稿記事 by softya(ソフト屋) » 14年前

横枠に衝突した場合は、Xベクトルを符号反転すると共にX座標を補正して枠の内側にX座標を書き換えます。
上枠はYに関して同様のことを行います。
こうするだけで反射するはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: ボールの速度変更

#3

投稿記事 by ISLe » 14年前

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

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

Be

Re: ボールの速度変更

#4

投稿記事 by Be » 14年前

みなさんありがとうございました。
ひとつひとつ試していきたいと思います。

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

閉鎖

“C言語何でも質問掲示板” へ戻る