每像素碰撞-可以做一些一般的提示



我理解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;
}

要对照地图检查整个玩家精灵,您必须为玩家精灵中的每个像素调用"碰撞"方法,创建一个vector2以获得正确的点。检查几个点要容易得多(例如,左上、中上、右上、左下、中下、右下。不需要检查中间,因为侧面已经在测试中。)

最新更新