3

私はPongゲームの作成に取り組んでいますが、問題が発生しました。

線から点を跳ね返す方法を見つけようとしています。

これを行うために私が理解できる最善の方法は

  • ボールの現在と将来の位置を計算します。
    • 線分:{Ball.location、Ball.location + Ball.direction}(Ball.locationおよびBall.directionはカスタムベクトル/座標クラスを使用します)
  • 生成された線分が壁またはパドルのいずれかと交差するかどうかを計算します。
    • ??? これを行う方法はまだわかりません(別の質問で質問します)
  • 見つかった最初の交差点で
    • ボールをラインから跳ね返らせる
      • で形成された三角形を作成します
        • a=ボールの現在の位置
        • b=線の交点。
        • c=ライン上のボールの現在の位置に最も近いポイント。
      • ボールがラインに当たる角度を見つけます
        • 角度=cos(distance(b、c)/ distance(a、b))
      • ボールの方向を回転させる角度を見つけます
        • (90度)* 2
      • ボールの方向を回転させて、新しい位置に移動します
        • 今のところラインに到達するために移動した距離を無視すると、正確にライン上にある必要はありません
  • それ以外の場合、交差点がない場合
    • ボールを新しい位置に移動します。

これは許容できる方法ですか、それとも何かが足りませんか?

4

6 に答える 6

5

ボールの中心がパドルの半径内にあるかどうかを確認して、バウンドする時間かどうかを確認する必要があります。バウンス角の計算に関していくつかの答えがある古い質問がありました。

于 2009-05-14T00:13:48.323 に答える
3

本物のポンの感触が必要な場合は、実際の反射を行うよりも、新しいベクトルの計算がはるかに簡単です。Pongは、dxまたはdyの符号を逆にするだけです。ボールが水平バリアに当たった場合は、dyを無効にします。垂直、次にdxを否定します。

于 2009-05-14T00:15:21.080 に答える
1

ゲームループで、オブスティカルがないかのように新しいボールの位置を計算します。
次に、新しい位置がオブスティカルエッジと交差するか、または過去にあるかどうかを確認します。いずれかの条件が満たされた場合は、ボールをオブスティカルから跳ね返して、新しいボールの位置を計算します。

開始点、角度、距離を指定して点を計算する方法が便利です。

Public Function TranslatePoint(ByVal tStartPoint As Point, _
ByVal tAngle as Decimal, ByVal tDistance As Decimal) As Point
于 2009-05-14T00:10:55.067 に答える
0

これが私がすることです:

1)ポンの辺がx=aとx=bの線にあると仮定します

2)ボールの位置を(x0、y0)とし、Ax + By=Cの線上を移動します

3)これから、その線が壁と交差する点(x1、y1)を簡単に計算できます

4)(x0、y1 + y0)がバウンス後の反射であることを知ることにより、バウンス後の線の方程式を得ることができます。(ボールは交点より下にy1-y0であるため、交点より上にy1 + y0になります。)

5)2つの方程式が与えられると、ポイントをプロットできます(速度がわかっていると仮定します)。

于 2009-05-14T00:14:43.157 に答える
0

ゲーム「N」で使用される衝突検出と応答(バウンスと摩擦を含む)について説明しているNチュートリアルに興味があるかもしれません。

チュートリアルは特に必要なものよりも深くなる可能性がありますが、よく書かれており、インタラクティブな例があります。簡単なバウンスは最初のトピックの1つです。

于 2009-05-14T03:00:43.270 に答える
0

バウンスは、グラフィックスドメインではなく、物理ドメインからの問題です。したがって、OpenGLはそれを実際にサポートしていません。ハードウェアを見ると、ビデオカードに似た物理カードが別々にあることに気付くでしょうが、最近の傾向はそれらを統合することです。

于 2009-05-14T08:20:02.597 に答える