1

弾丸がどの方向にも飛べるゲームを作ろうとしています。私はそれらを方向と大きさのあるベクトルにして、それらを方向に向かわせるようにしたいと思います。これを実装する方法がわかりませんか?

ありがとう

4

4 に答える 4

1

位置、方向ベクトル、および速度を含む弾丸クラスを持つことができます。ステップごとに、次のように弾丸の位置を更新できます。

position += direction * veclocity;

これは、方向が単位ベクトルであると想定しています。

于 2010-02-12T01:59:02.427 に答える
1

私は次のようなものから始めます:

struct Vector3f {
    float x, y, z;
};

struct Bullet {
    Vector3f position;
    Vector3f velocity;
};

inline const Vector3f& Vector3f::operator+=(const Vector &other)
{
    x += other.x;
    y += other.y;
    z += other.z;
    return *this;
}

inline const Vector3f& Vector3f::operator*=(float v)
{
    x *= v;
    y *= v;
    z *= v;
    return *this;
}

次に、で弾丸の位置を更新できますbullet.position += velocity(ベクトルの追加は、コンポーネントを個別に追加することで行われます)。速度ベクトルには、方向と速度(=ベクトルの大きさ)の両方が含まれていることに注意してください。

また、弾丸がフレームごとに遅くなる場合は、次のようにすることができますbullet.velocity *= 0.98(0.98は分数を表します)。スカラーを使用したベクトル乗算は、各コンポーネントにスカラーを乗算することによって行われます。

よろしく、クリストフ

于 2010-02-12T02:04:30.287 に答える
1

計算する必要がある2つの部分があります。まず、総距離から始めます。これは簡単なはずです:

total_distance = velocity * time

これが2Dゲームであると仮定すると、正弦波と余弦波を使用して、合計距離をXコンポーネントとYコンポーネントに分割する必要があります(特定の角度に対して)。

distance_y = total_distance * sin(2 * pi * angle / 360)
distance_x = total_distance * cos(2 * pi * angle / 360)

最後に、距離x / yは、弾丸の開始位置に基づいてオフセットする必要があります。

pos_x = distance_x + start_pos_x
pos_y = distance_y + start_pos_y

もちろん、これらすべてを素敵なクラスにまとめ、必要に応じて拡張して磨くことができます。

于 2010-02-12T02:10:29.090 に答える
0

これはどんな用途ですか?

http://www.cs.cmu.edu/~ajw/doc/svl.html

グーグルは素晴らしいツールです

于 2010-02-12T02:10:28.817 に答える