1
0
没有它很难诊断 任何 调试跟踪,但我有一两个主意。 首先,转储调试跟踪:打印每个时间步的显著值:播放器块的位置、碰撞块的位置和适用的速度。这将在所涉及对象的每个时间步为您提供一个类似于表的快照。 现在,查看碰撞前最后一个时间步中的值。我怀疑你的速度大概是-20,但在低于10像素的平台上着陆。您的更新逻辑需要处理两个时间点之间的着陆,并将播放器停在平台高度。在我看来,球员似乎被允许在整个时间步长内跌倒,这将把他柔嫩的下肢嵌入平台10像素。 其次,检查您是否正在比较较近的边缘:在这种情况下,玩家的下边缘与平台的上边缘。稍后,您需要处理玩家的右下角与方块的左上角接触的情况,并且您必须确定玩家是首先击中方块的顶部(落地)还是侧面(改变水平速度和下降)。 我不会改变计算的速度;我认为调整最终位置会更容易。您发布的最后一块代码是您已经作为特殊情况处理碰撞的地方。检测到碰撞时,获取对象的顶部曲面(y值)。如果它位于播放器底部的当前位置之上,则将该顶部曲面指定为正确的位置。这将使您的玩家坐在碰撞列表中最高的对象的顶部。 请注意,只有当您的整个碰撞列表不会掉落时,此操作才有效;对于横向碰撞,还需要分隔列表并根据需要调整每个边界。如果在同一时间步长上有来自多个侧面的碰撞,这可能会变得复杂。例如,当玩家撞到墙和平台时,一个恶棍从左侧猛击玩家。 |
TAJ · 如何在Pygame中移动玩家对象? 1 年前 |
Ahmed Mahmoud · 相互导入两个python模块 2 年前 |
sentimain · 如何将if语句合并到另一个if语句中? 2 年前 |
Ethanol · 如何修复pygame事件循环的缓慢性? 6 年前 |
Atia · 无法导入Pygame 6 年前 |