帮助矢量

时间:2010-02-12 01:54:11

标签: c++ vector-graphics

我正在尝试制作一个子弹可以朝任何方向飞行的游戏。我会让它们成为一个方向和大小的向量,使它们成为方向。我只是不确定如何实现这个?

由于

4 个答案:

答案 0 :(得分:1)

你可以有一个子弹类,其中包含位置,方向矢量和速度。每一步你都可以更新子弹的位置:

position += direction * veclocity;

这假定方向是单位矢量。

答案 1 :(得分: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位置(通过单独添加组件来完成向量添加)。注意,速度矢量包含方向和速度(=矢量的大小)。

如果你的子弹每帧都变慢,你可以做bullet.velocity *= 0.98之类的事情(其中0.98表示分数)。使用标量进行向量乘法是通过将每个分量乘以标量来完成的......

此致 克里斯托弗

答案 2 :(得分:1)

有两个部分需要计算。首先,我从总距离开始。这应该是直截了当的:

total_distance = velocity * time

假设这是一个2D游戏,那么你应该使用sine&余弦打破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

当然,你可以将所有这些包装在一个很好的课程中,扩展和扩展。根据需要进行抛光。

答案 3 :(得分:0)

这有什么用?

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

谷歌是一个很棒的工具