1

私は弾丸オブジェクトの初期化でこれを持っています:

    x = startX;
    y = startY;
    double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));
    speedX = (6 * (endX - x)) / distance;
    speedY = (6 * (endY - y)) / distance;

画面上のタッチした場所に移動しますが、タッチするほど速くなります。これは紙の上では問題なく動作します。さまざまな長さで試してみましたが、動作するはずですが、弾丸はプレーヤーからすべてのステップに触れたポイントまでの線上で 6 ピクセル移動する必要があります。そして、その更新方法はもちろん動きます。しかし、弾丸が異なる速度で移動するのはなぜですか?

4

2 に答える 2

3

Java オペレーターを覚えていれば...

交換

double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));

double distance = Math.sqrt(Math.pow(endX - x, 2) + Math.pow(endY - y, 2));
于 2013-02-08T00:27:47.727 に答える
0

すべての測定値がピクセル単位であり、速度を 1 ステップあたり 6 ピクセルにしたい場合、少しの三角関数を使用して速度を計算できます。

double theta = Math.atan2(endY - startY, endX - startX);
velX = 6 * Math.cos(theta);
velY = 6 * Math.sin(theta);

物理学者として「速度」と「速度」という用語を使用していることに注意してください。速度はスカラー値で、速度は大きさと方向を持つベクトルです。

于 2013-02-08T00:30:35.863 に答える