4

私は単純なブレイクアウト ゲームを行っていますが、ボールの速度と方向を処理してさまざまな斜めのパスに移動する方法を理解するのに問題があります。私は更新メソッドでこのコードを使用しています:

xPos += xSpeed * direction;
yPos += ySpeed * direction;

異なる vaules を使用xSpeed = 2YSpeed = 1、異なる対角線パスに変更することができますが、それでも同じ速度が必要です。の値を大きくxSpeed = 4して別の斜めのパスを取得すると、速度も上がり、ボールが同じ速度で移動するようにします。Iの値には、direction1 または -1 を使用します。directionしかし、角度で斜めのパスを取得するには、の値を変更する方が良いと思いますか? ブレイクアウト ゲームでは、ボールが反対方向に跳ね返らなければなりません。私は数学が苦手なので、これを解決するためにいくつかの助けを借りたいと思います。コードを改善する方法はありますか?

4

1 に答える 1

4

sine関数と関数を使用して、軸cosineの相対的な動きを取得できます。xy

お気に入り:

xPos += speed * Math.sin(movementAngle);
yPos += speed * Math.cos(movementAngle);

さまざまなアニメーションで上記の (極座標speed) を使用すると、移動の方向または速度 (それぞれおよびmovementAngle変数)を簡単に変更できるという利点があります。デカルト座標 (xおよびy位置) を使用する場合、速度または移動方向のいずれかを変更すると、 および の両方に自明ではない変更が必要にxなりyます。

上記のソリューションの数式は、極座標からデカルト座標への変換にすぎません。

編集:より「自然な」動作を得るには、右、上、左、右に移動する手段の場合movementAngle、次を使用します。0PI/2PI3*PI/2

xPos += speed * Math.cos(-1*movementAngle);
yPos += speed * Math.sin(-1*movementAngle);
于 2013-03-28T07:38:49.610 に答える