0

そのため、マウス ボタンを押すと、いくつかのレーザーを発射して悪者を排除するキャラクターを用意しました。

現在、私は小さなレーザーを追加しています。次に、これを使用します:

        this.velocity.x = (MousePos.x - StartPos.x) * bulletSpeed
        //same for Y

(私もこれを試しました)

        this.x += (MousePos.x - StartPos.x) / bulletSpeed
        //same for Y

レーザーが同じペースで動かないという事実を除けば、これは素晴らしいことです。つまり、マウスが 1000 ピクセル離れていても 500 ピクセル離れていても、同じ時間で到着するということです。つまり、マウスが遠くにあるほど速くなります。

私が知る必要があるのは、オブジェクトがどれだけ遠くまで移動する必要がある場合でも、オブジェクトが特定の速度で移動するようにする方法です。

ありがとう、

4

1 に答える 1

2

これは純粋な数学です。どちらの軸の速度も BulletSpeed を超えることはできないため、計算は次のようになります。

velocity.x = BulletSpeed * t;

ここで、t は -1 から 1 までの数値です。さらに、この数は一般に x と y で異なります。

velocity.x = BulletSpeed * tx;
velocity.y = BulletSpeed * ty;

さて、本題です - tx、ty の値をどのように計算しますか? まず、dx、dy、および StartPos から MousePos までの距離を取得します。

var dx:Number = MousePos.x - StartPos.x;
var dy:Number = MousePos.y - StartPos.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);

オブジェクトが dist 距離移動する間、その x および y 座標も dx および dy 距離移動することが簡単にわかります。同じ時間内に発生していますが、dx と dy は一般的に異なるため、同時にフィニッシュに到達するには座標を異なるステップで変更する必要があります。

var step_x:Number = dx / dist;
var step_y:Number = dy / dist;

これらの値は常に -1 から 1 の間になります。あとは、BulletSpeed を適用するだけです。

velocity.x = BulletSpeed * step_x;
velocity.y = BulletSpeed * step_y;

または、今は単純化せずに

velocity.x = BulletSpeed * dx / dist;
velocity.y = BulletSpeed * dy / dist;
于 2015-02-06T15:35:58.793 に答える