2012-04-17 66 views
0

我在XNA中使用动画片动画,我想使用像素完美的碰撞。我的问题是像素完美碰撞检查spritesheet上的当前像素是否透明,而不是检查我使用的spritesheet的部分。这是我的代码:像素完美碰撞动画片动画,XNA

blockTextureData = new Color[shot.texture.Width * shot.texture.Height]; 
shot.texture.GetData(blockTextureData); 

personTextureData = new Color[player2.texture.Width * player2.texture.Height]; 

player2.texture.GetData(personTextureData); 

if (IntersectPixels(player2.CollissionBox, personTextureData, shot.CollissionBox, blockTextureData)) 

我想知道如何选择spritesheet的特定部分,并检查它的碰撞。我用this MSDN guide

编辑: 我设法弄清楚,我用这个代替

src = new Rectangle(frame, 0, 87, 100); 

player.texture.GetData<Color>(0, src, personTextureData,0, 87*100); 

和框架是你启动它,例如0第一和87第二,因为我使用spritesheet 2图片宽度为2*87,高度为100

编辑2: 现在的问题是,一旦你点击pixelperfect将停止工作,所以它只适用于1击。

回答

0

如果你可以详细说明你的意思,当你说它只有一次会有帮助。

我不得不调整相同的IntersectsPixels函数来处理我的项目。有一件事我发现有用的是使用非常缓慢的正方形(比如说100x100)动画,用纯红色填充,然后完全透明,只有其他的框架。

它在调试与碰撞和动画精灵的像素比较相关的问题方面有很多帮助。

看看您是否可以提供更多关于什么不工作以及如何分解的信息。祝你好运,解决您的问题。

+0

我正在读取spritesheet的错误部分,但我修复了它,现在即时播放虽然我从这行代码崩溃:player.texture.GetData (0,src,personTextureData,0,87 * 100); 说 Microsoft.Xna.Framework.Graphics.dll中发生未处理的“System.ArgumentException”类型的异常 附加信息:此资源的矩形太大或太小。 – 2012-04-23 12:54:58

+0

我修正了这个错误,我使用的是frameSize * currentFrame,因此它的大小并不比texture.Width大,问题是如果frameSize * currentFrame是500,并且图片的宽度是512,那么会尝试从500中读取并且然后添加100的宽度,所以它太多了600。 – 2012-04-23 13:33:32