我了解 Xna 中每像素碰撞背后的理论,你从两个纹理中获取纹理数据,然后比较它们,检查例如你的角色纹理的 alpha 值。
我想要做的是使用每像素碰撞来检查玩家精灵是否通过检查与某种颜色(黑色)的碰撞来接触地图。我之前尝试过实现这一点,但字符总是从地图上掉下来,没有引发编程错误。请将我指向文章/教程/视频,或者如果这里有人可以给我一些提示和要点,那也很棒。
如果我是你,我不会检查两个纹理之间的像素到像素。不过,只检查一点与地图并不算太糟糕。
//In Class-scope:
Color[] CollisionMapData;
Texture2D CollisionMap;
public void LoadContent()
{
CollisionMap = Content.Load<Texture2D>("map");
CollisionMapData = new Color[CollisionMap.Width * CollisionMap.Height];
CollisionMap.GetData<Color>(CollisionMapData);
}
public Boolean Collision(Vector2 position)
{
int index = (int)position.Y * CollisionMap.Width + (int)position.X;
if (index < 0 || index >= CollisionMapData.Length) //Out of bounds
return true;
if (CollisionMapData[index] == Color.Black)
return true;
return false;
}
要根据地图检查整个玩家精灵,您必须为玩家精灵中的每个像素调用 Collision 方法,创建一个 vector2 来获取正确的点。检查几个点要容易得多(例如;topleft、topmiddle、topright、left、right、bottomleft、bottommiddle、bottomright。无需检查中间,因为已经测试了边。)