0

私がやりたいことは、エンティティをパドルから跳ね返し、パドルの速度にも反応させることです。

古いブレイク アウト ゲームのように、パドルを速く動かすほど角度が鈍くなります。

私がこれまでに持っているのはこれです。

var playerPos = player.pos.x - paddle.pos.x;
var relativePos = Math.floor(player.pos.x - this.pos.x + (player.size.x / 2));
var angle = relativePos * (Math.PI / paddle.size.x);
var newVel = Math.cos(angle);

player.vel.x = newVel;

私の数学は以前のものではありません。

編集

Player は、size.x と size.y、pos.x と pos.y、velocity.x とvelocity.y などのプロパティを持つエンティティです。thisオブジェクトは同じプロパティを持ち、パドルです。

プレーヤーがボールです。

パドルを動かすと、y 次元の位置が設定され、x 方向に移動します。

4

1 に答える 1

1

あなたの投稿ではこれについて言及していませんでしたが、パドルに当たらない場合は速度を変更したくないと想定しているので、速度変更コード全体をラップする 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 行目はそれを と の比率に入れ、-11掛け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;
}

非常に単純なコードで、三角法は必要ありません。(わーい!)

これを変更したい場合は、私が実際に数学をよく知っているのでお手伝いできます.

于 2012-08-21T01:37:42.637 に答える