我正在尝试制作一个子弹可以朝任何方向飞行的游戏。我会让它们成为一个方向和大小的向量,使它们成为方向。我只是不确定如何实现这个?
由于
答案 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)
这有什么用?
谷歌是一个很棒的工具