精灵表动画上的像素完美碰撞,XNA
Posted
技术标签:
【中文标题】精灵表动画上的像素完美碰撞,XNA【英文标题】:Pixel perfect collision on spritesheet animation, XNA 【发布时间】:2012-04-28 16:39:49 【问题描述】:我在 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 的特定部分并检查与它的碰撞。我用this MSDN guide。
编辑: 我设法弄明白了,我用这个代替了
src = new Rectangle(frame, 0, 87, 100);
player.texture.GetData<Color>(0, src, personTextureData,0, 87*100);
框架是你启动它,例如0
用于第一个,87
用于第二个,因为我使用带有 2 张图片的精灵表,宽度为 2*87
,高度为 100
。
编辑2: 现在的问题是,一旦你点击了 pixelperfect 就会停止工作,所以它只适用于 1 次点击。
【问题讨论】:
【参考方案1】:如果你能详细说明你说它只有效一次的意思,那会有所帮助。
我必须对相同的 IntersectsPixels 函数进行相当多的调整才能与我的项目一起使用。我发现有用的一件事是使用一个非常慢的正方形动画(例如 100x100),填充纯红色,然后在它的唯一其他帧中完全透明。
它对调试与碰撞和动画精灵的像素比较相关的问题有很大帮助。
看看您能否提供更多信息,说明究竟是什么不工作以及它是如何发生故障的。祝您好运解决您的问题。
【讨论】:
我从 spritesheet 的错误部分读取但我修复了它,现在我正在玩虽然我从这行代码中遇到了崩溃: player.texture.GetData以上是关于精灵表动画上的像素完美碰撞,XNA的主要内容,如果未能解决你的问题,请参考以下文章