【问题标题】:pygame - collisions: teleporting and "sliding" issuepygame - 碰撞:传送和“滑动”问题
【发布时间】:2016-01-29 18:44:28
【问题描述】:

我已经发表了几篇关于 pygame 碰撞的文章,这里还有一篇。我为帖子的“垃圾邮件”道歉,但这些错误对我来说很奇怪。另外,我正在与一个小组合作,所以我不确定问题出在我制作的代码还是其他人制作的代码中。

话虽如此,这里是我们 github 的链接:https://github.com/drexel-game-devs/Project_Folder

我引用的所有代码都在代码文件夹中,在 Player Assets 下。

我负责创建 Physics_Engine 类,这是处理碰撞的地方。该函数在 Player_Assets 类中调用,其中存储了 Player 类。现在,碰撞被检测到并以一种有问题的方式处理。如果我从右侧接近一个物体,玩家会停下一段时间,然后传送穿过该物体。从顶部接近一个物体更奇怪:玩家将“滑”离该物体,然后从它的左/右侧爬下来,然后从物体的“底部”掉下来。

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 当玩家碰撞物体时,您似乎为某个变量(可以改变位置)添加了一些值 - 但您不应该这样做。当此变量足够大(大于碰撞对象)时,玩家位置(加上此变量)为您提供对象另一侧的位置。也许您在玩家碰撞对象时将speed 添加到x,但您更正位置只是为了绘制它.

标签: python pygame collision-detection collision game-physics


【解决方案1】:

我在handle_collision 看到了大问题

你在某处改变xy同时然后

  1. 你会遇到冲突 - spritecollide()

  2. 如果你移动left/right,你就会改变x

这就是问题所在。

spritecollide() 为您提供所有碰撞 - left/righttop/bottom

可能会发生玩家仅碰撞top/bottom,但您会将其视为left/right 碰撞(并且您会将玩家滑动到left/right 一侧)。

-

你必须这样做:

  1. 仅更改 x

  2. 获取碰撞 - 它只给出 left/right 碰撞

  3. 如果你移动left/right,你就会改变x

  4. 仅更改y

  5. 获取碰撞 - 它只给出 top/bottom 碰撞

  6. 如果你移动top/bottom,你就会改变y

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多