Xna Collision Dection

问题描述:

嗨,大家好,我正在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

这确实取决于它是否是一个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

对于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