2017-11-28 29 views
0

私はブレイクアウトの基本的なjavascriptのゲームを作っていますが、私は本当に、私はいくつかの問題を抱えている、まだ数学を学んでいない...ブレイクアウトゲーム数学 - DXための角度、DY

は、私はボールを打つにしたいですパドルに当たった角度に応じてバウンドします。

私はちょうどボールがパドルを打つ時に0から180度から角度を計算し、この機能を作りました。その角度は、ボールが移動する必要があるものです(ボールがパドルの先端に当たった場合は問題になりますが、後でそれを扱います)。それからdxとdy、私はそうするために三角法を使う必要があることを知っています。 (xはボールのx座標の変数です)

function getBallAngle(){ 
const maxAngle = 180; 
let hitPosition = (x - paddleX); 
let ballAngle = 0; 
const scaleToAngle = maxAngle/(paddleWidth); 

ballAngle = hitPosition * scaleToAngle; 

return ballAngle; } 

私は少し失われていますが、数学の助けをお願い致します。

編集:私はすでになく、ボールがパドルを跳ね返る角度を変更します。この機能のない作業ゲームを持っています。

+0

あなたの数学は、現時点では、同じアウトバウンド角度になります。アウトバウンドの角度を正しく計算するには、本当にインバウンドの角度を知る必要があります。 – Forty3

+0

Javascriptの角度はラジアンです。角度をradから 'angleRadians = angleDeg *(Math.PI/180)'に変換するには、角度をラジアンで指定すると、その角度の 'dx'、' dy'を 'dx = Math.cos(angleRadians) 'と' dy = Math.sin(angleRadians) 'ゼロクロスは3クロックで右にあります。あなただけのDXとDYを持っており、ラジアン 'angleRadians = Math.atan2(DY、DX)' DY最初 – Blindman67

+0

ああ、あなたはスピード 'speed'としてボールをしたいならば、' DX = Math.cos(との角度をしたい場合angleRadians)*スピード; 'と' DY = Math.sin(angleRadians)*スピード; ' – Blindman67

答えて

0

は、移動するボールがxyコンポーネント(あなたがdxdyのリクエストで暗示される)の両方を有するいる考えてみましょう。これをjavascriptで書いているので、これらの値をballオブジェクトに割り当てることができます。これにより、すべての目盛り(つまり、プログラムがゲームの現在の状態を計算してすべての表示オブジェクトを再描画するたびに参照できるようになります。

パドルを扱っていると仮定すると、ボールがパドルに当たったときに水平移動係数(x)は変化しません(ボールの後退を望んでいませんリテラルエッジの場合を除いてパドルから外してください。)。反射面のようにパドルを扱っているので、垂直移動係数(y)は単に下向きの方法から上向きの方法(単に乗算によって-1で達成される)に切り替えるだけです。

したがって、あなたが探している「角度」は実際にあなたのボールの運動特性のy部品のちょうど逆です。ボールは関係なく、インバウンド角度のパドル上の同じ点に当たると

+0

ボールをパドルの同じ場所に当ててゲームのバリエーションを与えるとき、同じアウトバウンドアングルが必要です。それがなければ、xは決して変化せず、プレーヤーはボールを逃さないと仮定して毎回同じ方法でゲームを実行します。しかし、ありがとう。 –

関連する問題