2

今、私はC ++でピンポンゲームを作成しています。これまでに、エンティティのと(円または多角形にすることができます)を保持するpaddleballを継承すると を作成しました。また、簡単に伝える関数を実装しました。エンティティが 2 つのエンティティに対して衝突している場合。entitycoordinatesbounding boxentity.isColliding(entity)

ここで、ボールを動かしたいと思います。ボールがエンティティと衝突すると、正しい速度座標 (x または y) が反転します。canMove()移動して衝突をチェックし、戻る場合は関数を作成することを考えましたが、x または y の速度座標を逆にする必要があるかどうかを確認する方法がわかりません。衝突。

なにか提案を?

4

4 に答える 4

0

Pong クローンの場合、パドルに衝突すると必ず水平速度が反転し、壁に衝突すると必ず垂直速度が反転します
ボールとパドルが衝突したときに垂直方向の速度を逆転させるかどうかを調べるには、ボールがパドルの何半分に当たるかを調べます。
衝突点を見つける方法が必要になります。

衝突の計算がはるかに簡単になるため、元のように正方形のボールと長方形のパドルから始めることをお勧めします。

また、より現実的な衝突モデルで身動きが取れなくなる前に、実際に適切に実行してプレイできるものを入手することをお勧めします。
機能するものを改善することは、将来機能する可能性があるものを改善するよりもはるかに楽しいものです。

于 2011-08-19T14:53:25.103 に答える
0

うーん、私があなたの問題を正しく理解していれば...速度座標の右側を逆にすると、ボールは本来の方法で移動し、もう一方を逆にすると、ボールは壁に入るのを再開します(ただし、別の角度から) )。

あなたの関数がどれほど速いかはわかりませんが、十分に速い場合は、次の方法で 試すcanMove()ことができるかもしれません: - これらの両方が機能しない場合は、特別なケースの状況 (例: コーナー) にあります -- 両方を逆にします:D


于 2011-08-19T08:02:31.930 に答える
0

複雑な形状と衝突がある場合にすべきことは、衝突点での接線を見つける必要があります。これは、反射角を計算するのに役立ちます。たとえば、接線が垂直または水平で、反射角が簡単に計算できる長方形がある場合: 既に述べたように、速度座標の 1 つを無効にします。円がある場合は複雑になります:)つまり、円が必要でsincos本当にそれが必要ですか?

于 2011-08-19T07:58:47.647 に答える
-1

まず、ボールがパドルに当たったとき、またはボールが当たったときのボールの速度を計算します。次に、三角法を使用して、ボールの方向とそのx座標とy座標(yay trig!)が、ボールが跳ね返る角度を計算します。その角度に基づいてボールの速度を再調整します(ヒント:かなりの量のトリガー...その可能性があります)。そのすべての三角法に注目する価値があり、それは速度でも機能します(速度ではありません)。

他のポンゲームのようにボールの速度を上げたり下げたりしようとしていると思いますか?最初に上記を実行してから、衝突角度に基づいて速度を変更することを心配してください。

使用しているグラフィックライブラリを教えていただければ、もっと簡単な方法があるかもしれません。

また、ポリゴンを使用すると、より難しくなります。円またはボックスから始めて、コードをリファクタリングするのが最善です。さまざまな形状の衝突検出を探す場合、そこには多くの理論と方法があります。「ポリゴン」の意味をもう少し具体的にする必要があります。

お役に立てれば

于 2011-08-19T08:24:36.703 に答える