2017-01-24 2 views
0

現在、ブレークアウトゲームに取り組んでおり、数学の問題に悩まされています。ここにシナリオがあります。基本ブレークアウトスケーリング数学

ボールの水平速度はbxspdです。 ボールのX座標はbxです。 ボールのスピードはbspdです。 バットのx座標はpxです。

ボールがバットに衝突するとき、バットの位置に対して水平方向にバウンスする必要があります。言い換えれば:

//衝突イベント bxspd = bx-px。

この方法では、ボールがバットの左側に当たったとき、ボールは左に跳ね返ります。さらにそれがバットのセンターの左側にあるほど、水平スピードは速くなります。

この問題は、私のバットが中央から両側に50の幅を持つことです。これをボールの最高速度に合わせるにはどうすればよいですか?つまり、バットの最左端に当たった場合、bxspdは-50ではなく-2になります。

よろしく、 クラリス

+0

この質問を書くと、何とかそれを把握することができました。 pxの原点はバットの左にあるので、次の式を考案しました。bdx =((bx - (px +(pwidth/2))/(pwidth/2))* bspd; – NodziGames

+0

質問を削除してから気軽に – mplungjan

+0

提案mplungjanありがとうございました。同じ質問があれば人々が参照として使うことができるように、質問に対する答えとして数式を書く方がより有益だと思います。 – NodziGames

答えて

0

質問を書いた後、なんとか何かがクリックされたので、それを必要とする人のための解決策がここにあります。 bdx =((bx - (px +(pwidth/2)))/(pwidth/2))* bspd;

bdxはボールのxspeedです。 bxはボールのx位置です。 pxはバットのx位置です。 pwidthはバットの幅です。 bspdはボールの最大速度変数であるため、bdxは最大ボール速度(bspd)に対して計算されます。

この式はオフセットでも動作しますのでご注意ください。その理由は、プレイヤーのXがバットの一番左側にあるからです。したがって、中心を見つけるために、プレーヤーのxにpwidth/2を追加して中心を見つけます。

+0

xとyに独立した最高速度がありますか? – fafl

+0

私はあなたの質問を誤解していないと思うが、ここに行く。 bspdは、ゲームの開始時にデフォルトで2に設定されます。この数値は、ボールのxspeedを2に制限し、yspeedを2に制限します。私が質問を誤解した場合は、私に知らせてください。 – NodziGames

+0

しかし、斜めに飛んでいるボールは2.82のスピードで飛ぶことができますが、これは奇妙な気がしませんか?私の理解では、x軸とy軸ではなく、絶対速度を制限すべきである。 – fafl

0

は、それはそれは0を取得し、左にそれが-extrabatspeedを取得中心に、extrabatspeedの追加の速度を取得する、ボールがバットの外側の右端に当たった場合のは、言ってみましょう。バットの幅はbatwidthで、ボールとの衝突はbatcollisionxで、0とbatwidthの間の値になります。私はx軸が左から右に行くと仮定します。

次に、ballspeedxの変更を2 * extrabatspeed * ballcollisionx/batwidth - extrabatspeedと計算できます。

衝突時にballspeedyが負になります。

ボールスピードの上限はその後に発生するはずです。 sqrt(x^2 + y^2)として速度を計算し、xとyの両方を同じ係数で補正します。

+0

ありがとうございました。私は質問を投稿した後に式を作成することができました。あなたの数学は読みやすくなりますので、私は次回のことを覚えておきます。 – NodziGames

関連する問題