0

我在 XNA 中使用 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 的特定部分并检查与它的碰撞。我使用了这个 MSDN 指南

编辑:我设法弄明白了,我用这个代替

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

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

和框架是你启动它,例如0第一个和87第二个,因为我使用带有 2 张2*87宽度和100高度的图片的精灵表。

Edit2:现在的问题是,一旦你点击 pixelperfect 就会停止工作,所以它只适用于 1 次点击。

4

1 回答 1

0

如果您可以详细说明您所说的仅适用一次,那将有所帮助。

我必须对相同的 IntersectsPixels 函数进行相当多的调整才能与我的项目一起使用。我发现有用的一件事是使用一个非常慢的正方形动画(比如 100x100),填充纯红色,然后在它的唯一其他帧中完全透明。

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

看看您是否可以提供更多信息,说明究竟是什么不起作用以及它是如何发生故障的。祝您好运解决您的问题。

于 2012-04-20T04:25:34.920 回答