因为壁架,角色不能很好地运作。 让我们使用一些照片:
这是绿色的字符,浅绿色是spriteBox。 黑色是为了“世界”。
在精灵的底部,在纹理宽度的50%处,有一个热点。 (在红十字会的中心)
我正在使用此热点来检测底部的碰撞。 一切都在这里工作。
但是如果玩家向右跑并且太晚跳过1个像素(太晚意味着:当热点不高于黑色像素= Texture.Width / 2 - 1
时),则玩家无法跳跃并且会跌倒。即使他身体的50%-1px触及世界。这就是问题所在。
登陆时遇到同样的问题。
如果我添加更多热点,这里将变为:角色将浮动。所以我不知道怎么做......
希望你能提供帮助。
答案 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)