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击。
我正在读取spritesheet的错误部分,但我修复了它,现在即时播放虽然我从这行代码崩溃:player.texture.GetData(0,src,personTextureData,0,87 * 100); 说 Microsoft.Xna.Framework.Graphics.dll中发生未处理的“System.ArgumentException”类型的异常 附加信息:此资源的矩形太大或太小。 –
2012-04-23 12:54:58
我修正了这个错误,我使用的是frameSize * currentFrame,因此它的大小并不比texture.Width大,问题是如果frameSize * currentFrame是500,并且图片的宽度是512,那么会尝试从500中读取并且然后添加100的宽度,所以它太多了600。 – 2012-04-23 13:33:32