2010-02-12 63 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