我会做这个简短。在侧面滚动游戏中,我有一个用户控制的精灵和一个用作地形的精灵。环境小精灵级别在理论上可以是地板,天花板或墙壁,具体取决于它的位置以及玩家与之碰撞的方向,需要做一件事:击退玩家。Pygame - 防止雪碧重叠
如果玩家与环境精灵的顶部发生碰撞,玩家将停留在顶部边框上。如果玩家跳跃并与环境精灵的底部发生碰撞,他们会停止向上移动并开始下降。逻辑权利?
我找不出来。我的第一个解决方案希望说明我的问题(而不是实际的代码,只是问题区域):
if player.rect.bottom > environment.rect.top:
player.rect.bottom = environment.rect.top - 1
if player.rect.top < environment.rect.bottom:
player.rect.top = environment.rect.bottom + 1
if player.rect.right > environment.rect.left:
etc.
etc.
etc.
这正常一些的时间,但在拐角处得到真正狡猾becase的超过1px的每一个重叠意味着两个或两个以上玩家的双方实际上是一次碰撞环境精灵。简而言之,这是我尝试过的每个解决方案都面临的问题。
我已经潜伏了每一个线程,教程,视频,博客,指南,常见问题和帮助网站我可以合理甚至无理地在谷歌上找到,我不知道。这肯定是有人以前提到过的 - 我知道,我已经看到了。我正在寻找建议,可能是一个链接,只是任何事情来帮助我克服我只能假设的一个简单的解决方案,我找不到。
你如何重新计算任何方向的碰撞精灵的位置?
奖励:我也实施了重力 - 或者至少有一个接近恒定的向下的力量。如果它很重要。