あなたの投稿ではこれについて言及していませんでしたが、パドルに当たらない場合は速度を変更したくないと想定しているので、速度変更コード全体をラップする if 関数を作成しましょう。
if(paddle.x + paddle.size > player.x && player.x + player.size > paddle.s){
//Code to be ran to change velocity
}
これは、プレーヤーが底で四角い場合にのみ機能します。プレーヤーの端ではなく真ん中から離れたい場合は、代わりに次のコードを実行します。
if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
//Code to be ran to change velocity
}
プレーヤーが実際にパドルを叩いたことが分かったので、パドルを叩いた場所の速度を調整してみましょう。これはさまざまな方法で行うことができます (別の方法が必要な場合は教えてください) が、パドルに当たる位置に基づいて速度を作成し、現在の速度をそれに追加することでこれを行います。範囲を から まで-5
にし5
ます。
player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
(paddle.size/2) * 5;
最初の行は、プレーヤーの位置がパドルに関連してどこにあるかを計算し、2 行目はそれを と の比率に入れ、-1
を1
掛け5
ます。これらすべてが現在のベロシティに追加されます。変数5
は好みに合わせて変更する必要があります。
最後に行うことは、パドル速度の調整です。これは、パドルが全体的な速度に及ぼす影響を増減させない限り、非常に簡単です。
player.vel.x += paddle.vel.x;
非常に単純なコードで、本当に必要なものはすべて揃っています。
すべてをまとめると、次のようになります。
if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
(paddle.size/2) * 5 + paddle.vel.x;
}
非常に単純なコードで、三角法は必要ありません。(わーい!)
これを変更したい場合は、私が実際に数学をよく知っているのでお手伝いできます.