2D Pixel Perfect平台 - 角色和壁架

时间:2013-11-26 00:31:24

标签: xna collision-detection

因为壁架,角色不能很好地运作。 让我们使用一些照片:

Standing 这是绿色的字符,浅绿色是spriteBox。 黑色是为了“世界”。

在精灵的底部,在纹理宽度的50%处,有一个热点。 (在红十字会的中心)

我正在使用此热点来检测底部的碰撞。 一切都在这里工作。

Running 但是如果玩家向右跑并且太晚跳过1个像素(太晚意味着:当热点不高于黑色像素= Texture.Width / 2 - 1时),则玩家无法跳跃并且会跌倒。即使他身体的50%-1px触及世界。这就是问题所在。

Landing 登陆时遇到同样的问题。

floating

如果我添加更多热点,这里将变为:角色将浮动。所以我不知道怎么做......

希望你能提供帮助。

2 个答案:

答案 0 :(得分:1)

这是我所做的代码示例:

public Boolean TouchingPlatformUpdater(Vector2 charapos){
    int[] BasePlatforms = { Convert.ToInt16(platformapos1.X), Convert.ToInt16(platformapos1.Y), Convert.ToInt16(platformapos2.X), Convert.ToInt16(platformapos2.Y), Convert.ToInt16(platformapos3.X), Convert.ToInt16(platformapos3.Y), Convert.ToInt16(platformapos4.X), Convert.ToInt16(platformapos4.Y), Convert.ToInt16(platformapos5.X), Convert.ToInt16(platformapos5.Y), Convert.ToInt16(platformapos6.X), Convert.ToInt16(platformapos6.Y), Convert.ToInt16(platformapos7.X), Convert.ToInt16(platformapos7.Y), Convert.ToInt16(platformapos8.X), Convert.ToInt16(platformapos8.Y), Convert.ToInt16(platformapos9.X), Convert.ToInt16(platformapos9.Y), Convert.ToInt16(platformapos10.X), Convert.ToInt16(platformapos10.Y), Convert.ToInt16(platformapos11.X), Convert.ToInt16(platformapos11.Y), Convert.ToInt16(platformapos12.X), Convert.ToInt16(platformapos12.Y), Convert.ToInt16(platformapos13.X), Convert.ToInt16(platformapos13.Y), Convert.ToInt16(platformapos14.X), Convert.ToInt16(platformapos14.Y), Convert.ToInt16(platformapos15.X), Convert.ToInt16(platformapos15.Y) };
    for (int Item = 0; Item < BasePlatforms.Length; Item = Item + 2) 
    {
        try
        {
            if (charapos.X > BasePlatforms[Item] - 15 && charapos.X < BasePlatforms[Item] + 60 && charapos.Y > BasePlatforms[Item + 1] - 14 && charapos.Y < BasePlatforms[Item + 1])
            {
                return true;
            }
        }
        catch { }
    }
    return false;

我的玩家&#34;是一个正方形,平台也是如此,但你可以用更好的水平区域和世界做同样的事情。它做的是检查玩家是否在单个平台覆盖的区域内。然而,您必须找到使曲线有效的方法
总的来说,你的系统存在很大缺陷。只需交换我的概念或找到另一个使用。热点事情看起来不会很好。我可以为您修复,但您没有为我们提供任何代码来帮助您解决问题。如果您在此问题中获得代码,请通过Zeusoflightning125@gmail.com告诉我,并编辑我的答案。

答案 1 :(得分:0)

看一下像蠕虫一样的类似游戏,它们在你的第三个例子中有几个热点,但它们交错以匹配精灵,它们也会根据使用的精灵(例如面向左/右)而改变

阅读下面的Worm2D页面:

worms2d.info