2010-11-22 128 views
6

我正在研究基於觸摸的遊戲,而且我遇到了繪製用戶碰到的路徑的問題。 我試圖模仿這些應用程序http://www.youtube.com/watch?v=G3CECr6mT1Qhttp://www.youtube.com/watch?v=r34-_0wrVC4繪製兩點之間的路徑

我在XNA/C#中這樣做。

我的問題是:我有一組定義用戶觸摸路徑的航點。我不知道如何在所有這些點之間得到一條程式化的線條,所以我想:「嘿,我將只有一個非常小的圖像,即'線',並在航點之間的每個點上繪製它,並相應地旋轉它。我不確定這是否是最好的解決方案

但是我被卡住了,因爲我不知道如何獲得這兩點之間的所有座標,我有兩點,我可以得到從第一載體第二,等等,但我似乎無法得到正確的數學。

任何建議或幫助? 謝謝!

回答

5

要計算兩點之間的中間點,請找出從一點到另一點的方向矢量以及點之間的距離。將距離按0和1之間的因子t縮放,其中t = 0對應於第一個點t = 0.5是它們之間的一半,t = 1對應於第二個點。然後按此值縮放方向矢量並將其添加到原始點。

Vector2 IntermediatePoint(Vector2 p0, Vector2 p1, float t) 
{ 
    Vector2 delta = p1 - p0; 

    float distance = delta.Length(); 

    if (distance == 0.0f) 
    { 
     return p0; 
    } 
    else 
    { 
     Vector2 direction = delta/distance; 

     return p0 + direction * (distance * t); 
    } 
} 

如果您計算p0和p1之間的多個點,則應該只計算一次距離和方向。

你也可以看看使用XNA RoundLine連接你的觀點。另外一個建議是set up a textured rotated quad

+0

+1爲RoundLine。 – 2010-11-22 22:55:08

+0

Empyrean - 謝謝!這就像一個魅力!非常感激!你知道你的代碼或多或少與XNA繪製原始圖像的方式相同,還是我會採用perf perf命中?此外,我將在未來發布我的代碼段,以便在此線程中進行專門的冒險。此外,roundline看起來非常酷,我會檢查出來。 – Steve 2010-11-22 23:13:38

0

退房的樣品在http://create.msdn.com/en-US/education/catalog/sample/primitives關於如何繪製簡單的細節「原始圖」包括一條線。

+0

謝謝,但我實際上已經看過了。從這個角度來看,我不確定我會如何定製他們的產品線,使其更具吸引力 - 我發現的唯一定製是顏色選項。我也認爲他們讓XNA做了大量的繪圖計算,因此我不能看到他們如何做的數學。 – Steve 2010-11-22 19:16:32

1
pointA = waypointsToDraw.ElementAt(i); 
pointB = waypointsToDraw.ElementAt(i + 1); 
deltaVector = pointB - pointA; 
distance = deltaVector.Length(); 
direction = deltaVector/distance; 
for (int z = 1; z < distance; z++) 
{ 
    newPoint = pointA + direction * (distance * (z/distance)); 
    //this is the newPoint - it will be every point/pixel between pointA and pointB. Put drawing code here 

} 

上面的代碼示例。 PointA和PointB是兩個端點,newPoint將是他們之間的每一點