2012-05-15 59 views
0

我使用C#和XNA目前正在高爾夫球比賽。 到目前爲止,我已經能夠使球飛,彈跳和滾動,同時顯示的位置和速度。 現在我希望能夠看到球道(類似於下面的圖片),以檢查整個球運動。抽選球飛行使用XNA

http://www.golf-simulators.com/images/ms4.jpg

我的代碼更新在固定的時間間隔球的位置。 )使用這些位置 1), 2)將它們插入到VertexPositionColor []陣列, 3),並使用GraphicsDevice.DrawUserPrimitives繪製它們(方法

,但我不運氣到目前爲止,:我想到的所述VertexPositionColor是靜態數組,而位置的數據量始終增加。

我想用名單,但GraphicsDevice.DrawUserPrimitives()方法拒絕接受,作爲一個輸入

protected override void Draw(GameTime gameTime) 
    { 

    trail_vertice = new VertexPositionColor; 
    trail_vertice.Position = Position; 
    trail_vertice.Color = Color.Black; 
    trail_amount += 1; 
    trailList.Add(trail_vertice); 

    basicEffect.CurrentTechnique.Passes[0].Apply(); 
    graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, trailList, 0, trail_amount); 

    } 

我不需要像使用粒子引擎高級的效果。只需一條線就足夠了。任何建議?

回答

1

C#的名單<>類上有一個方便的.ToArray()函數,你可以要繪製的圖元,每次打電話。希望有所幫助!

graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, trailList.ToArray(), 0, trail_amount); 
+0

的感謝!它解決了這個問題 – bonchenko

0

,而不是將列表中的數組每幀,這在我看來是非常低效的,你可以計算的估計數目,您將需要顯示的線索頂點,創建一個大小的數組並填寫每幀有更多的值。 (您傳遞給DrawUserPrimitives的參數之一是要從該陣列中繪製的原語的數量)

如果您無法計算此值,則還可以嘗試設置線索可以達到的最大長度,以便當它達到那個長度,它開始覆蓋舊的價值觀。如果相機跟隨着球,這應該不重要。如果這些解決方案都不符合您的需求,請繼續使用ToArray函數。