2011-12-17 46 views
0

嗨,大家好,我正在xna製作一個簡單的tron lightcycle類型的遊戲,想知道是否有人知道最有效的繪製線索和進行碰撞的方式是什麼?Xna Collision Dection

感謝

+0

我不認爲你會得到任何有用的答案,像這樣的問題。這是非常模糊的。你需要更具體。另外 - 渲染和碰撞檢測是兩個不同的問題,所以你應該單獨向他們詢問IMO。 – 2011-12-17 16:59:01

+0

是3d嗎?或2d? – 2011-12-17 20:11:10

+0

是2d @SteveH – Mike 2011-12-18 00:45:45

回答

2

這確實取決於它是否是一個3D或2D遊戲,但我認爲這些教程應包括這樣兩個效果的方式:

http://rbwhitaker.wikidot.com/3d-tutorials

http://rbwhitaker.wikidot.com/2d-tutorials

對於三維碰撞檢測,您可以使用BoundingBox物體來近似一個光周期,並且可能還有一個BoundingSphere也可以派上用場.4

編輯:

LightEmitter是Vector2其中的線索會出來,

LightTrail是與光路徑的1個像素寬的部分一個Texture2D,

LastEmitterPos是表示Vector2的LightEmitter

和小徑的最後一個位置是RenderTarget2D其RenderTargetUsage設置爲RenderTargetUsage.PreserveContents

例如繪製方法:

GraphicsDevice.SetRenderTarget(Trails); 

spriteBatch.Begin(); 


for (float i = 0; i <= (LightEmitter - LastEmitterPos).Length(); i++) 
{ 
    Vector2 Pos = Vector2.Lerp(LastEmitterPos, LightEmitter, i/(LightEmitter - LastEmitterPos).Length()); 
    spriteBatch.Draw(LightTrail, Pos, new Rectangle(0, 0, 32, 3), Color.White, MathHelper.ToRadians(90.0f), new Vector2(16, 1.5f), 1.0f, SpriteEffects.None, 1f); 
} 

spriteBatch.End(); 

GraphicsDevice.SetRenderTarget(null); 

spriteBatch.Begin(); 
spriteBatch.Draw(Trails, Vector2.Zero, Color.White); 
spriteBatch.End(); 

base.Draw(gameTime); 

有一些毛刺和很多這裏需要優化的,但我敢肯定,這可以給你一個好主意什麼方向去,或者至少有點。的鼓勵,如果沒有別的;)

+0

遊戲會在2D – Mike 2011-12-18 00:41:54

+0

你可以爲效果平鋪紋理,並使用Rectangles與Rectangle.Intersects()進行碰撞檢測,這裏是一個鏈接:http:// msdn .microsoft.com/en-us/library/system.windows.shapes.rectangle.aspx – annonymously 2011-12-18 00:53:01

+0

我嘗試過使用矩形,但是當你爲每個玩家獲得數百個遊戲時,即不管它是否會減慢遊戲速度,也就是說,每當他們改變方向時? – Mike 2011-12-18 01:03:21

2

對於2D遊戲,矩形是一種快速/簡單的方法來獲得基本的碰撞檢測。

MSDN文章here

既然你只需要設置矩形邊界的每個對象要檢測碰撞,然後測試Rectangle1.Intersects(Rectangle2)條件,看看他們接觸。

+0

由於矩形不會繞過角落,它們將如何鏈接? – Mike 2011-12-18 00:43:28

+0

對於圓角部分我找到了一篇他們似乎可以解決這個問題的文章。 [here](http://gamedev.stackexchange.com/questions/13268/rounded-corners-in-xna)。 不,我不認爲使用大量的矩形會減慢您的遊戲速度,將它看作是無形地繪製在現有小精靈上的其他精靈,並且跟隨移動的精靈。 – phadaphunk 2011-12-18 02:44:00