每像素碰撞-可以做一些一般的提示
本文关键字:提示 像素 碰撞 | 更新日期: 2023-09-27 17:59:45
我理解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以获得正确的点。检查几个点要容易得多(例如,左上、中上、右上、左下、中下、右下。不需要检查中间,因为侧面已经在测试中。)