Pygame地面碰撞检测与定位

2024-04-19 01:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的角色正在坠落,并朝着某个精灵平台前进,我会在检测到碰撞后标记我的角色已着陆,那么重置角色位置的最佳方法是什么-使他位于平台的矩形上方,还是仍在剪裁它?在

我担心的是,如果我的角色在平台的矩形上方,我的函数fall()将被调用,因为他没有接触任何东西;如果我的角色正在剪切平台的矩形,那么我的jump()函数可能会受到阻碍,因为它可能认为他一起飞就着陆了。显然这两种方法都有解决办法,但我真的只是在寻找一个公约,如果有的话。在

(如果需要,我可以发布代码,但代码不是问题所在。我只是在寻找正确的方法)

谢谢

迈克


Tags: 方法函数代码标记角色平台精灵重置
1条回答
网友
1楼 · 发布于 2024-04-19 01:27:46

我会让他触摸平台,这样fall()就不会再被调用了。在

and if my character is clipping the platform's rectangle, than my jump() function may be hindered, because it may think he's landed as soon as he takes off.

在jump()函数中,当它移动字符时,使它在至少移动x像素之前不能停止。在

您可以通过在jump()的开头对False进行布尔运算,并在遍历x个像素之后使用一个计数器使其成为True。确保x足够让角色停止剪切平台,并且不要太多,以免它与其他对象发生碰撞。在

一旦它移动了x个像素,然后允许碰撞测试开始查看字符何时再次命中某个对象。在

例如:

MINIMUM_DISTANCE = x 
# ^ how many pixels you want to move to stop clipping

count = 0 #used for counting

def jump():
    global count
    in_air = False
    #do your movements here, and increase count each time you move a pixel
    if count >= MINIMUM_DISTANCE: in_air=True
    if in_air:
        #collision detection here
        #once there is a collision:
        if collision:
            count = 0
    return

为了将来的参考,最好发布您的代码,即使它不是与代码相关的错误。只是为了让我们能看到并感受到你的方法

希望我能帮忙

相关问题 更多 >