Pygame地面碰撞检测和位置重置

时间:2012-06-15 18:18:26

标签: python position pygame reset collision

假设我的角色正在堕落,朝着某个精灵平台走去,并且一旦发现碰撞就标记我的角色落地了,重置角色位置的最佳方法是什么 - 这样他就在平台的矩形上方或者说他还在削减它?

我担心的是,如果我的角色位于平台的矩形之上,那么我的函数fall()将被调用因为他没有触及任何东西,并且如果我的角色正在剪切平台的矩形,那么我的jump()函数可能会被阻碍,因为它可能认为他一旦起飞就会降落。显然还有两种解决办法,但我真的只是在寻找约定,如果有的话。

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

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

我会让他触摸平台,以便不再调用fall()

  

如果我的角色正在削减平台的矩形,那么我的jump()函数可能会受到阻碍,因为它可能会认为他一旦起飞就会降落。

在jump()函数中,当它移动角色时,使它无法停止,直到它移动至少x个像素。

您可以通过在False的开头设置一个布尔值jump(),并在遍历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

仅供将来参考,最好发布您拥有的代码,即使它不是代码相关的错误。这样我们就可以看到并感受到你的方法

希望我能帮忙