我在XNA中使用spritesheet动画,我想使用像素完美碰撞。我的问题是像素完美碰撞检查spritesheet上的当前像素是否透明,而不是检查我正在使用的spritesheet部分。这是我的代码:
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
,因为我使用带有2个图片的spritesheet,宽度为2*87
{{1}高度。
EDIT2: 现在的问题是,一旦你点击pixelperfect将停止工作,所以它只适用于1次点击。
答案 0 :(得分:0)
如果你可以详细说明你的意思,当你说它只能起作用时会有所帮助。
我必须调整相同的IntersectsPixels功能才能使用我的项目。我发现有用的一件事是使用一个非常慢的动画(例如100x100)填充纯红色,然后完全透明,只有其他帧。
与碰撞和动画精灵上的像素比较相关的调试问题帮助了很多。
看看您是否可以提供更多信息,了解哪些不起作用以及它是如何分解的。祝您解决问题。