2010-02-12 135 views
1

我想制作一个游戏,子弹可以在任何方向飞行。我愿意让他们的方向和幅度向量,使他们走的方向。我只是不知道如何实现这一点?有关矢量帮助

感谢

+0

要生成随机方向和向量吗? – 2010-02-12 01:56:11

+0

我想通过角度和大小作为参数,基本上子弹可以去任何方向 – jmasterx 2010-02-12 01:57:35

+0

如果它是一个子弹,你不想'量级。你需要它的位置,方向,速度和时间步长(自上次更新以来的时间) – Craig 2010-02-12 02:06:02

回答

1

有两个部分需要进行计算。首先,我会从总距离开始。这应该是简单的:

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) 

pos_x = distance_x + start_pos_x 
pos_y = distance_y + start_pos_y 

当然,你可以换这一切在一个不错的类,扩展0:

最后,距离X/Y应根据子弹的起始位置偏移根据需要进行抛光。

+0

解决我的问题谢谢 – jmasterx 2010-02-12 02:15:33

+0

这工作,但不是最好的解决方案。也没有包括幅度或方向。 imo原始海报需要学习一些矢量数学。 – Craig 2010-02-12 02:21:49

+1

我的例子方程确实包括幅度(速度)和方向(角度)。另外,从他的评论中,他无法将矢量分解为X/Y组件,所以我试图举出一个简单的例子来说明如何实现。 – 2010-02-12 02:27:35

1

你可以有一个包含一个位置,方向向量和速​​度的子弹类。每次你可以更新子弹的位置像这样:

position += direction * veclocity; 

这假定方向是一个单位向量。

+0

我不知道这是如何转换为X和Y坐标? – jmasterx 2010-02-12 02:00:30

+0

不要忘记以时间步速划分速度,否则你会有疯狂的快速移动物体。 – Craig 2010-02-12 02:01:34

+0

但是,'position'是什么,我怎样才能把它变成一个x,y坐标? – jmasterx 2010-02-12 02:02:57

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代表分数)。一个标量矢量乘法表示各成分与标量相乘即可...

问候, 克里斯托夫

+0

谢谢! DirectX现在都很有意义!我只是不确定如何制作角度,假设我想让它以50度行进 – jmasterx 2010-02-12 02:09:45

+0

Vector3f(0,1,0)意味着您直线前进(假设y轴指向上方)和Vector( 1,0,0)可能意味着你左转。如果你想以50°行驶,你可以写Vector(cos(50),sin(50),0)。 – tux21b 2010-02-12 02:13:55

0
这个

有什么用处?

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

谷歌是一个很好的工具

+0

我认为像矢量和矩阵数学这样简单的事情,值得他一段时间去真正学会如何做数学。如果他想参加比赛,他需要知道方程式和他们的目的,以解决进一步的问题。如知道点产品和跨产品工作解决S.A.T – Craig 2010-02-12 02:14:41