Xna 2D像素完美平台-角色和壁架

Xna 2D像素完美平台-角色和壁架,xna,collision-detection,Xna,Collision Detection,由于窗台的原因,这个角色的表现不太好。 让我们使用一些图片: 这是绿色的角色,浅绿色是精灵盒。 黑色代表“世界” 在精灵的底部,纹理宽度的50%处,有一个热点。(在红十字会的中心) 我用这个热点从底部检测碰撞。 这里一切正常 但是,如果玩家向右跑,跳得太晚(太晚意味着:当热点不在黑色像素上方=Texture.Width/2-1),玩家就不能跳,就会摔倒。即使他50%-1倍的身体接触到世界。这就是问题所在 着陆也有同样的问题 如果我添加更多热点,这里将变成:角色将浮动。所以我不知道怎么做

由于窗台的原因,这个角色的表现不太好。 让我们使用一些图片:

这是绿色的角色,浅绿色是精灵盒。 黑色代表“世界”

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

我用这个热点从底部检测碰撞。 这里一切正常

但是,如果玩家向右跑,跳得太晚(太晚意味着:当热点不在黑色像素上方=
Texture.Width/2-1
),玩家就不能跳,就会摔倒。即使他50%-1倍的身体接触到世界。这就是问题所在

着陆也有同样的问题

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


希望您能提供帮助。

以下是我所做工作的代码示例:

公共布尔触摸平台更新程序(Vector2 charapos){ int[]BasePlatforms={Convert.ToInt16(platformapos1.X)、Convert.ToInt16(platformapos1.Y)、Convert.ToInt16(platformapos2.X)、Convert.ToInt16(platformapos3.X)、Convert.ToInt16(platformapos3.Y)、Convert.ToInt16(platformapos4.X)、Convert.ToInt16(platformapos4.Y)、Convert.ToInt16(platformapos5.X)、Convert.ToInt16(platformpos5.Y)、Convert.ToInt16(platformpos6.X)、Convert.ToInt16(platformpos6.Y)、Convert.ToInt16(platformpos7.X)、Convert.ToInt16(platformpos8.X)、Convert.ToInt16(platformpos8.Y)、Convert.ToInt16(platformpos9.X)、Convert.ToInt16(platformpos9.Y)、Convert.ToInt16(platformpos10.X)、Convert.ToInt16(platformapos10.Y)、Convert.ToInt16(platformapos11.X)、Convert.ToInt16(platformapos11.Y)、Convert.ToInt16(platformapos12.Y)、Convert.ToInt16(platformapos13.X)、Convert.ToInt16(platformapos14.X)、Convert.ToInt16(platformapos14.Y)、Convert.ToInt16(platformapos15.X),Convert.ToInt16(platformapos15.Y)}; 对于(int Item=0;Item基本平台[项目]-15和&charapos.X<基本平台[项目]+60和&charapos.Y>基本平台[项目+1]-14和&charapos.Y<基本平台[项目+1]) { 返回true; } } 捕获{} } 返回false; 我的“玩家”是一个正方形,平台也是如此,但你可以在更精细的层次上对脚区域和世界做同样的事情。它所做的是检查玩家是否在单个平台覆盖的区域内。但是,你必须找到一种使曲线工作的方法。


总的来说,你的系统有很大的缺陷。只需切换到我的概念或找到另一个来使用。热点的东西看起来不太好用。虽然我可以为你修复你的系统,但你没有提供任何代码来帮助你修复。如果你得到这个问题的代码,请在Zeusoflightning125@gmail.com我会编辑我的答案。

看看类似于蠕虫的游戏,它们有几个热点,如第三个示例中所示,但它们交错排列以匹配精灵,它们也会根据使用的精灵而变化(例如面向左/右)

阅读下面的Worm2D页面:


你的游戏是基于瓷砖的。我的游戏是基于像素完美的,比如游戏
蠕虫
。这个系统即使在斜坡上也能完美工作。唯一的问题是像本主题中解释的那样,窗台。我只想知道是否有人有想法,代码真的不需要。无论如何,Thx!^^你可以在下降会给玩家增加另一个热点,比如说,点=x+(3/4)宽度(75%)和x+(1/4)宽度(25%)。因此,只在跳跃后添加热点,并在着陆后删除/忽略它们。@Colton我们应该深入探讨您的想法。这是一个非常好的想法,但至少有一个问题:当角色将在斜坡上着陆时,他将像图4中那样着陆。是的,您基本上是在尝试两个不同的物理定律,这将导致p问题。有一个想法是,你的像素角色真的会那么大吗?如果它更小,那么这一点重叠就不会明显。例如,如果腿靠得更近。在这种情况下,一个好的选择是专注于角色设计,而不是编程。(我认为这是一个需要考虑的重要因素。改变设计可以使编程变得更干净。)我会继续思考。呵呵!非常有趣的文章,即使我没有找到答案,也会对我有很大帮助。Thx!我在他的链接中找到了答案,在Colton的帮助下:我必须添加Colton的另外两个热点,并且我必须在主热点下添加一个“标记”(大约8px)。如果“标记”没有碰撞世界,则我检查添加的2个热点。如果标记碰撞世界,则我不检查它们。Thx!